View Single Post
  #2  
Old 04-21-2008, 07:27 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
You will need to use some 3D math to determine the orientation of the triangle. Here is some code that will return the transormation matrix of a triangle, given 3 points:
Code:
import viz
viz.go()


P1 = [-1,1,2]
P2 = [-0.1,2,2.5]
P3 = [1,0.1,2.3]


def GetTriangleMatrix(p1,p2,p3):
	
	#Get vector of p1 to p2
	v1 = viz.Vector(p2) - viz.Vector(p1)
	
	#Get vector of p1 to p3
	v2 = viz.Vector(p3) - viz.Vector(p1)
	
	#Take cross product to determine normal of triangle
	normal = v2 ^ v1
	
	#Determine rotation by rotating forward vector to normal
	m = viz.Matrix()
	m.makeVecRotVec([0,0,1],normal)
	
	#Set position of matrix to center of triangle
	p = viz.Vector(p1) + viz.Vector(p2) + viz.Vector(p3)
	m.setPosition( p / 3.0 )
	
	#Return the transformation matrix
	return m
	
	
#Draw triangle
viz.startlayer(viz.TRIANGLES)
viz.vertexcolor(viz.RED)
viz.vertex(P1)
viz.vertex(P2)
viz.vertex(P3)
viz.endlayer()

#Get matrix of triangle
m = GetTriangleMatrix(P1,P2,P3)

#Create arrow to show triangle rotation/translation
arrow = viz.add('marker.wrl')
arrow.setMatrix(m)

#Setup pivot camera
import vizcam
vizcam.PivotNavigate(center=m.getPosition(),distance=10)

#Add ground
viz.add('tut_ground.wrl')
Reply With Quote