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