about summary refs log tree commit diff homepage
path: root/utils/hacks/TreeGraphs/Graphics/Geometry/mat4.py
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-05-02 17:59:13 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-05-02 17:59:13 +0000
commitf4cdc443fb86f715ab93f3528aff23452a5bb3a3 (patch)
treeffab5077611d32a8b95c9d9b4f96b47703190e82 /utils/hacks/TreeGraphs/Graphics/Geometry/mat4.py
parentbae2fa50234b0a575a18a119019e5d96f7ff7ecf (diff)
downloadklee-f4cdc443fb86f715ab93f3528aff23452a5bb3a3.tar.gz
Add a little hack for visualizing KLEE branching.
 - This consumes the treestream files produced with --write-paths or
   --write-sym-paths, and renders out the tree in a very ad-hoc funky way.
   Your mileage may vary! :)

Example image: http://klee.llvm.org/data/treegraph_example.jpg
Example movie: http://klee.llvm.org/data/treegraph_example.avi

git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@102869 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/hacks/TreeGraphs/Graphics/Geometry/mat4.py')
-rw-r--r--utils/hacks/TreeGraphs/Graphics/Geometry/mat4.py153
1 files changed, 153 insertions, 0 deletions
diff --git a/utils/hacks/TreeGraphs/Graphics/Geometry/mat4.py b/utils/hacks/TreeGraphs/Graphics/Geometry/mat4.py
new file mode 100644
index 00000000..8dc7d35c
--- /dev/null
+++ b/utils/hacks/TreeGraphs/Graphics/Geometry/mat4.py
@@ -0,0 +1,153 @@
+import vec4,mat3

+

+def identity():

+	return ((1.0, 0.0, 0.0, 0.0),

+			(0.0, 1.0, 0.0, 0.0),

+			(0.0, 0.0, 1.0, 0.0),

+			(0.0, 0.0, 0.0, 1.0))

+

+def fromtrans(trans):

+	return ((1.0, 0.0, 0.0, 0.0),

+			(0.0, 1.0, 0.0, 0.0),

+			(0.0, 0.0, 1.0, 0.0),

+			(trans[0], trans[1], trans[2], 1.0))

+

+def fromscale(scale):

+	x,y,z= scale

+	x,y,z= float(x),float(y),float(z)

+	return ((  x, 0.0, 0.0, 0.0),

+			(0.0,   y, 0.0, 0.0),

+			(0.0, 0.0,   z, 0.0),

+			(0.0, 0.0, 0.0, 1.0))

+def fromscaleN(n):

+	return fromscale((n,n,n))

+

+def fromortho(left,right,bottom,top,znear,zfar):

+	m0= ( 2.0/(right-left), 0.0, 0.0, 0.0)

+	m1= (0.0,  2.0/(top-bottom), 0.0, 0.0)

+	m2= (0.0, 0.0, -2.0/(zfar-znear), 0.0)

+	m3= (	-((right+left)/(right-left)),

+			-((top+bottom)/(top-bottom)),

+			-((zfar+znear)/(zfar-znear)),

+			1.0)

+	return (m0,m1,m2,m3)

+

+def mulN(m,N):

+	return tuple([vec4.mulN(v,N) for v in m])

+	

+def mul(a,b):

+	b_trans= zip(* b)

+	return tuple([transmulvec4(b_trans, a_r) for a_r in a])

+

+	# multiple vector v by a transposed matrix

+def transmulvec4(m_trans,v):

+	return tuple([vec4.dot(v, m_c) for m_c in m_trans])

+

+def mulvec4(m,v):

+	return transmulvec4(zip(* m), v)

+	

+def trans(m):

+	((m00,m01,m02,m03),	

+	 (m10,m11,m12,m13),	

+	 (m20,m21,m22,m23),	

+	 (m30,m31,m32,m33))= m

+	 

+	return (	(m00,m10,m20,m30),	

+				(m01,m11,m21,m31),	

+				(m02,m12,m22,m32),	

+				(m03,m13,m23,m33))

+

+def det(m):

+	((m00,m01,m02,m03),	

+	 (m10,m11,m12,m13),	

+	 (m20,m21,m22,m23),	

+	 (m30,m31,m32,m33))= m

+	 

+	a= m00 * mat3.det(	((m11, m12, m13), 

+						 (m21, m22, m23), 

+						 (m31, m32, m33)) );

+	b= m10 * mat3.det(	((m01, m02, m03), 

+						 (m21, m22, m23), 

+						 (m31, m32, m33)) );

+	c= m20 * mat3.det(  ((m01, m02, m03), 

+						 (m11, m12, m13), 

+						 (m31, m32, m33)) );

+	d= m30 * mat3.det(	((m01, m02, m03), 

+						 (m11, m12, m13), 

+						 (m21, m22, m23)) );

+	

+	return a-b+c-d;

+

+def adj(m):

+	((m00,m01,m02,m03),	

+	 (m10,m11,m12,m13),	

+	 (m20,m21,m22,m23),	

+	 (m30,m31,m32,m33))= m

+	 

+	t00=  mat3.det( ((m11, m12, m13), 

+					 (m21, m22, m23),

+					 (m31, m32, m33)) )

+	t01= -mat3.det( ((m10, m12, m13), 

+					 (m20, m22, m23),

+					 (m30, m32, m33)) )

+	t02=  mat3.det( ((m10, m11, m13), 

+					 (m20, m21, m23),

+					 (m30, m31, m33)) )

+	t03= -mat3.det( ((m10, m11, m12), 

+					 (m20, m21, m22),

+					 (m30, m31, m32)) )

+

+

+	t10= -mat3.det( ((m01, m02, m03), 

+					 (m21, m22, m23),

+					 (m31, m32, m33)) )

+	t11=  mat3.det( ((m00, m02, m03), 

+					 (m20, m22, m23),

+					 (m30, m32, m33)) )

+	t12= -mat3.det( ((m00, m01, m03), 

+					 (m20, m21, m23),

+					 (m30, m31, m33)) )

+	t13=  mat3.det( ((m00, m01, m02), 

+					 (m20, m21, m22),

+					 (m30, m31, m32)) )

+

+	t20=  mat3.det( ((m01, m02, m03), 

+					 (m11, m12, m13),

+					 (m31, m32, m33)) )

+	t21= -mat3.det( ((m00, m02, m03), 

+					 (m10, m12, m13),

+					 (m30, m32, m33)) )

+	t22=  mat3.det( ((m00, m01, m03), 

+					 (m10, m11, m13),

+					 (m30, m31, m33)) )

+	t23= -mat3.det( ((m00, m01, m02), 

+					 (m10, m11, m12),

+					 (m30, m31, m32)) )

+

+	t30= -mat3.det( ((m01, m02, m03), 

+					 (m11, m12, m13),

+					 (m21, m22, m23)) )

+	t31=  mat3.det( ((m00, m02, m03), 

+					 (m10, m12, m13),

+					 (m20, m22, m23)) )

+	t32= -mat3.det( ((m00, m01, m03), 

+					 (m10, m11, m13),

+					 (m20, m21, m23)) )

+	t33=  mat3.det( ((m00, m01, m02), 

+					 (m10, m11, m12),

+					 (m20, m21, m22)) )

+					

+	return ((t00,t01,t02,t03),

+			(t10,t11,t12,t13),

+			(t20,t21,t22,t23),

+			(t30,t31,t32,t33))

+	

+def inv(m):

+	d= det(m)

+	t= trans(adj(m))

+	v= 1.0/d

+	return tuple([(a*v,b*v,c*v,d*v) for a,b,c,d in t])

+	

+def toGL(m):

+	m0,m1,m2,m3= m

+	return m0+m1+m2+m3
\ No newline at end of file