def omega2thetadot(t, o): mat1 = Matrix([[1, sin(t[0])*tan(t[1]), cos(t[0])*tan(t[1])], [0, cos(t[0]), -sin(t[0])], [0, sin(t[0])/cos(t[1]), cos(t[0])/cos(t[1])]]) #mat1 = [[0, -sin(t[0]), cos(t[0])*cos(t[1])], [0, cos(t[0]), sin(t[0])*cos(t[1])], [1, 0, -sin(t[1])]] return mat1*o
def computeThetaDot(self, dt): mat1 = Matrix([[1, sin(self.Angles[0])*tan(self.Angles[1]), cos(self.Angles[0])*tan(self.Angles[1])], [0, cos(self.Angles[0]), -sin(self.Angles[0])], [0, sin(self.Angles[0])/cos(self.Angles[1]), cos(self.Angles[0])/cos(self.Angles[1])]]) self.ThetaDot = mat1*self.Omega
from ray import vector3 from ray import ray from PIL import Image from PIL import ImageDraw from objects import face, sphere from numpy.ma.core import tan ## main process ## if __name__ == '__main__': ## initialize parameters ## w = 320 h = 240 PI = 3.14159265 view_angle = 60 * PI / 180.0 view_ratio = tan(view_angle/2) / (w/2.0) img_size = (w,h) im = Image.new("RGB", img_size, 'rgb(128,128,128)') draw = ImageDraw.Draw(im) ## objects in virtual space ## ''' set light ''' light = ray(vector3(1.0,-1.8,5.0), vector3(0.0,1.0,0.0)) ''' set eye position''' eye = vector3(0.0,0.0,-1.0) ''' primitive objects ''' obj_list = [] obj_list.append(face(vector3(0.0,-2.0,0.0), vector3(0.0,1.0,0.0), 255)) obj_list.append(face(vector3(0.0, 2.0,0.0), vector3(0.0,-1.0,0.0), 255<<8)) obj_list.append(face(vector3(-2.0,0.0,0.0), vector3(1.0,0.0,0.0), 255<<16)) obj_list.append(face(vector3( 2.0,0.0,0.0), vector3(-1.0,0.0,0.0), 255 + (255<<8)))