行列を使って、オブジェクトの回転を行うスクリプトです。
#!env python
import sys
import math
def torad(d):
return d/180.0*math.pi
def mulmatrix(m, v):
vv = [0, 0, 0]
for i in range(3):
vv[i] = m[i][0]*v[0] + m[i][1]*v[1] + m[i][2]*v[2]
return vv
def rotateX(v, d):
r = torad(d)
s = math.sin(r)
c = math.cos(r)
m = [[1, 0, 0],
[0, c, -s],
[0, s, c]]
return mulmatrix(m, v)
def rotateY(v, d):
r = torad(d)
s = math.sin(r)
c = math.cos(r)
m = [[c, 0, s],
[0, 1, 0],
[-s, 0, c]]
return mulmatrix(m, v)
def rotateZ(v, d):
r = torad(d)
s = math.sin(r)
c = math.cos(r)
m = [[c, -s, 0],
[s, c, 0],
[0, 0, 1]]
return mulmatrix(m, v)
rx = float(sys.argv[1])
ry = float(sys.argv[2])
rz = float(sys.argv[3])
infp = open(sys.argv[4], 'r')
outfp = open(sys.argv[5], 'w')
for line in infp.readlines():
s = line.split()
if len(s) < 1:
continue
if s[0] == 'v':
v = [float(s[1]), float(s[2]), float(s[3])]
v = rotateX(v, rx)
v = rotateY(v, ry)
v = rotateZ(v, rz)
outfp.write('v ' + str(v[0]) + ' ' + str(v[1]) + ' ' + str(v[2]) + '\n')
else:
outfp.write(line)
infp.close()
outfp.close()
import sys
import math
def torad(d):
return d/180.0*math.pi
def mulmatrix(m, v):
vv = [0, 0, 0]
for i in range(3):
vv[i] = m[i][0]*v[0] + m[i][1]*v[1] + m[i][2]*v[2]
def rotateX(v, d):
r = torad(d)
s = math.sin(r)
c = math.cos(r)
m = [[1, 0, 0],
[0, c, -s],
[0, s, c]]
return mulmatrix(m, v)
rx = float(sys.argv[1])
ry = float(sys.argv[2])
rz = float(sys.argv[3])
infp = open(sys.argv[4], 'r')
outfp = open(sys.argv[5], 'w')
for line in infp.readlines():
s = line.split()
if len(s) < 1:
continue
if s[0] == 'v':
v = [float(s[1]), float(s[2]), float(s[3])]
v = rotateX(v, rx)
v = rotateY(v, ry)
v = rotateZ(v, rz)
outfp.write('v ' + str(v[0]) + ' ' + str(v[1]) + ' ' + str(v[2]) + '\n')
else:
outfp.write(line)