forked from Stephan/geometryfactor
Compare commits
No commits in common. "11b627bc428eb482786dff95d0b9890cc769aee2" and "8ebf914806204ed8a797b59be4a50bfe0c3eb032" have entirely different histories.
11b627bc42
...
8ebf914806
1 changed files with 0 additions and 123 deletions
123
Struktur.py
123
Struktur.py
|
|
@ -1,123 +0,0 @@
|
||||||
from sys import argv, stdout, stderr
|
|
||||||
from math import pi as π
|
|
||||||
import numpy as np
|
|
||||||
from numpy import sqrt, sin, cos, tan, array, arange, empty, cross, newaxis
|
|
||||||
from numpy.linalg import solve
|
|
||||||
from getopt import getopt
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
|
|
||||||
def vector(x=0.,y=0.,z=0.):
|
|
||||||
return array([[x],[y],[z]])
|
|
||||||
|
|
||||||
def vtuple(v):
|
|
||||||
return tuple(v[:,0])
|
|
||||||
|
|
||||||
def scale(x=1., y=1., z=1.):
|
|
||||||
return array(((x,0,0),
|
|
||||||
(0,y,0),
|
|
||||||
(0,0,z)))
|
|
||||||
|
|
||||||
def rotate(axis, phi):
|
|
||||||
m=scale()
|
|
||||||
c=cos(phi)
|
|
||||||
s=-sin(phi)
|
|
||||||
for i in range(3):
|
|
||||||
if i!=axis:
|
|
||||||
m[i,i]=c
|
|
||||||
for j in range(3):
|
|
||||||
if j!=i and j!=axis:
|
|
||||||
m[i,j]=s
|
|
||||||
s=-s
|
|
||||||
return m
|
|
||||||
|
|
||||||
def vector(x=0., y=0., z=0.):
|
|
||||||
return array([[x],[y],[z]])
|
|
||||||
|
|
||||||
def length(v):
|
|
||||||
return np.linalg.norm(v)
|
|
||||||
|
|
||||||
class Ray:
|
|
||||||
|
|
||||||
def __init__(self, th=0, phi=0, psi=0, r=0):
|
|
||||||
self.th=th
|
|
||||||
self.phi=phi
|
|
||||||
self.r=r
|
|
||||||
self.psi=psi
|
|
||||||
self.dir=rotate(2,phi) @ rotate(1,th)
|
|
||||||
self.o=self.dir @ vector(r*cos(psi), r*sin(psi))
|
|
||||||
self.v=self.dir @ vector(z=1)
|
|
||||||
|
|
||||||
def ov(self, o, v):
|
|
||||||
self.o=o
|
|
||||||
self.v=v
|
|
||||||
return self
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return vtuple(self.o) + vtuple(self.v)
|
|
||||||
|
|
||||||
class Rays:
|
|
||||||
def __init__(self, origin, angle_diff):
|
|
||||||
self.origin = np.array(origin)
|
|
||||||
self.angle_diff = angle_diff
|
|
||||||
self.vectors = self.generate_vectors(angle_diff)
|
|
||||||
|
|
||||||
def generate_vectors(self, angle_diff):
|
|
||||||
vectors=[]
|
|
||||||
n=int(2*np.pi/angle_diff)
|
|
||||||
for i in range(1,n):
|
|
||||||
for j in range(1,n):
|
|
||||||
x=np.sin(i)*np.cos(j)
|
|
||||||
y=np.sin(i)*np.sin(j)
|
|
||||||
z=np.cos(i)
|
|
||||||
vectors.append([x,y,z])
|
|
||||||
return vectors
|
|
||||||
|
|
||||||
def get_data(self):
|
|
||||||
return self.vectors
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return str(self.vectors)
|
|
||||||
|
|
||||||
class Plane:
|
|
||||||
|
|
||||||
def __init_(self, o, v, w):
|
|
||||||
self.o=o
|
|
||||||
self.v=v
|
|
||||||
self.v=v
|
|
||||||
|
|
||||||
def normale(o,v,w):
|
|
||||||
v1=o - v
|
|
||||||
v2=v - w
|
|
||||||
norm= np.cross(v1,v2)
|
|
||||||
|
|
||||||
def coord(o,v,w):
|
|
||||||
v1=o - v
|
|
||||||
v2=v - w
|
|
||||||
norm= np.cross(v1,v2)
|
|
||||||
a=0
|
|
||||||
for i in range(3):
|
|
||||||
a=a+(norm[i]*o[i])
|
|
||||||
return a
|
|
||||||
|
|
||||||
def cross(p,e):
|
|
||||||
m=empty((3,3))
|
|
||||||
m[:,0]=p[0]
|
|
||||||
m[:,1]=p[1]
|
|
||||||
m[:,2]=e[1]
|
|
||||||
res=np.linalg.solve(m,[0,0,0])
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue