Compare commits

...

2 commits

Author SHA1 Message Date
guinea.pitt
11b627bc42 Delete example 2024-02-16 16:22:23 +01:00
guinea.pitt
9bcb20e441 First version 2024-02-16 16:21:25 +01:00

123
Struktur.py Normal file
View 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