forked from Stephan/geometryfactor
Compare commits
2 commits
8ebf914806
...
11b627bc42
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
11b627bc42 | ||
|
|
9bcb20e441 |
1 changed files with 123 additions and 0 deletions
123
Struktur.py
Normal file
123
Struktur.py
Normal file
|
|
@ -0,0 +1,123 @@
|
||||||
|
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