aboutsummaryrefslogtreecommitdiff
path: root/src/graph/view3D/transform3d.c.pamphlet
diff options
context:
space:
mode:
Diffstat (limited to 'src/graph/view3D/transform3d.c.pamphlet')
-rw-r--r--src/graph/view3D/transform3d.c.pamphlet179
1 files changed, 179 insertions, 0 deletions
diff --git a/src/graph/view3D/transform3d.c.pamphlet b/src/graph/view3D/transform3d.c.pamphlet
new file mode 100644
index 00000000..77da7555
--- /dev/null
+++ b/src/graph/view3D/transform3d.c.pamphlet
@@ -0,0 +1,179 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/graph/view3D transform3d.c}
+\author{The Axiom Team}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{License}
+<<license>>=
+/*
+Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+@
+<<*>>=
+<<license>>
+
+#define _TRANSFORM3D_C
+#include "axiom-c-macros.h"
+#include "useproto.h"
+
+
+#include "header.h"
+
+#include "all_3d.H1"
+
+void
+#ifdef _NO_PROTO
+matrixMultiply4x4(xxA,xxB,array)
+ float xxA[4][4], xxB[4][4], array[4][4];
+#else
+matrixMultiply4x4(float xxA[4][4],float xxB[4][4],float array[4][4])
+#endif
+{
+ array[0][0] = xxA[0][0]*xxB[0][0] + xxA[0][1]*xxB[1][0] +
+ xxA[0][2]*xxB[2][0] + xxA[0][3]*xxB[3][0];
+ array[1][0] = xxA[1][0]*xxB[0][0] + xxA[1][1]*xxB[1][0] +
+ xxA[1][2]*xxB[2][0] + xxA[1][3]*xxB[3][0];
+ array[2][0] = xxA[2][0]*xxB[0][0] + xxA[2][1]*xxB[1][0] +
+ xxA[2][2]*xxB[2][0] + xxA[2][3]*xxB[3][0];
+ array[3][0] = xxA[3][0]*xxB[0][0] + xxA[3][1]*xxB[1][0] +
+ xxA[3][2]*xxB[2][0] + xxA[3][3]*xxB[3][0];
+ array[0][1] = xxA[0][0]*xxB[0][1] + xxA[0][1]*xxB[1][1] +
+ xxA[0][2]*xxB[2][1] + xxA[0][3]*xxB[3][1];
+ array[1][1] = xxA[1][0]*xxB[0][1] + xxA[1][1]*xxB[1][1] +
+ xxA[1][2]*xxB[2][1] + xxA[1][3]*xxB[3][1];
+ array[2][1] = xxA[2][0]*xxB[0][1] + xxA[2][1]*xxB[1][1] +
+ xxA[2][2]*xxB[2][1] + xxA[2][3]*xxB[3][1];
+ array[3][1] = xxA[3][0]*xxB[0][1] + xxA[3][1]*xxB[1][1] +
+ xxA[3][2]*xxB[2][1] + xxA[3][3]*xxB[3][1];
+ array[0][2] = xxA[0][0]*xxB[0][2] + xxA[0][1]*xxB[1][2] +
+ xxA[0][2]*xxB[2][2] + xxA[0][3]*xxB[3][2];
+ array[1][2] = xxA[1][0]*xxB[0][2] + xxA[1][1]*xxB[1][2] +
+ xxA[1][2]*xxB[2][2] + xxA[1][3]*xxB[3][2];
+ array[2][2] = xxA[2][0]*xxB[0][2] + xxA[2][1]*xxB[1][2] +
+ xxA[2][2]*xxB[2][2] + xxA[2][3]*xxB[3][2];
+ array[3][2] = xxA[3][0]*xxB[0][2] + xxA[3][1]*xxB[1][2] +
+ xxA[3][2]*xxB[2][2] + xxA[3][3]*xxB[3][2];
+ array[0][3] = xxA[0][0]*xxB[0][3] + xxA[0][1]*xxB[1][3] +
+ xxA[0][2]*xxB[2][3] + xxA[0][3]*xxB[3][3];
+ array[1][3] = xxA[1][0]*xxB[0][3] + xxA[1][1]*xxB[1][3] +
+ xxA[1][2]*xxB[2][3] + xxA[1][3]*xxB[3][3];
+ array[2][3] = xxA[2][0]*xxB[0][3] + xxA[2][1]*xxB[1][3] +
+ xxA[2][2]*xxB[2][3] + xxA[2][3]*xxB[3][3];
+ array[3][3] = xxA[3][0]*xxB[0][3] + xxA[3][1]*xxB[1][3] +
+ xxA[3][2]*xxB[2][3] + xxA[3][3]*xxB[3][3];
+}
+
+
+void
+#ifdef _NO_PROTO
+vectorMatrix4(xxD,xxE,xxF)
+ float xxD[4], xxE[4][4], xxF[4];
+#else
+vectorMatrix4(float xxD[4],float xxE[4][4],float xxF[4])
+#endif
+{
+ xxF[0]= xxD[0]*xxE[0][0] + xxD[1]*xxE[1][0] + xxD[2]*xxE[2][0] + xxD[3]*xxE[3][0];
+ xxF[1]= xxD[0]*xxE[0][1] + xxD[1]*xxE[1][1] + xxD[2]*xxE[2][1] + xxD[3]*xxE[3][1];
+ xxF[2]= xxD[0]*xxE[0][2] + xxD[1]*xxE[1][2] + xxD[2]*xxE[2][2] + xxD[3]*xxE[3][2];
+ xxF[3]= xxD[0]*xxE[0][3] + xxD[1]*xxE[1][3] + xxD[2]*xxE[2][3] + xxD[3]*xxE[3][3];
+}
+
+
+void
+#ifdef _NO_PROTO
+ROTATE(xxR)
+ float xxR[4][4];
+#else
+ROTATE(float xxR[4][4])
+#endif
+{
+ xxR[0][0]= -(cosTheta); xxR[0][1]= -(-sinTheta*cosPhi); xxR[0][2]= -(sinTheta*sinPhi); xxR[0][3]= 0.0;
+ xxR[1][0]= -(sinTheta); xxR[1][1]= -(cosTheta*cosPhi); xxR[1][2]= -(-cosTheta*sinPhi); xxR[1][3]= 0.0;
+ xxR[2][0]= 0.0; xxR[2][1]= -(sinPhi); xxR[2][2]= -(cosPhi); xxR[2][3]= 0.0;
+ xxR[3][0]= 0.0; xxR[3][1]= 0.0; xxR[3][2]= 0.0; xxR[3][3]= -(1.0);
+}
+
+void
+#ifdef _NO_PROTO
+ROTATE1(xxR)
+ float xxR[4][4];
+#else
+ROTATE1(float xxR[4][4])
+#endif
+{
+ xxR[0][0]= (cosTheta); xxR[0][1]= (-sinTheta*cosPhi); xxR[0][2]= (sinTheta*sinPhi); xxR[0][3]= 0.0;
+ xxR[1][0]= (sinTheta); xxR[1][1]= (cosTheta*cosPhi); xxR[1][2]= (-cosTheta*sinPhi); xxR[1][3]= 0.0;
+ xxR[2][0]= 0.0; xxR[2][1]= (sinPhi); xxR[2][2]= (cosPhi); xxR[2][3]= 0.0;
+ xxR[3][0]= 0.0; xxR[3][1]= 0.0; xxR[3][2]= 0.0; xxR[3][3]= (1.0);
+}
+
+
+void
+#ifdef _NO_PROTO
+SCALE(x,y,z,xxS)
+ float x, y, z, xxS[4][4];
+#else
+SCALE(float x,float y,float z,float xxS[4][4])
+#endif
+{
+ xxS[0][0] = x; xxS[0][1] = 0.0; xxS[0][2] = 0.0; xxS[0][3] = 0.0;
+ xxS[1][0] = 0.0; xxS[1][1] = y; xxS[1][2] = 0.0; xxS[1][3] = 0.0;
+ xxS[2][0] = 0.0; xxS[2][1] = 0.0; xxS[2][2] = z; xxS[2][3] = 0.0;
+ xxS[3][0] = 0.0; xxS[3][1] = 0.0; xxS[3][2] = 0.0; xxS[3][3] = 1.0;
+}
+
+
+void
+#ifdef _NO_PROTO
+TRANSLATE(x,y,z,xxT)
+ float x, y, z, xxT[4][4];
+#else
+TRANSLATE(float x,float y,float z,float xxT[4][4])
+#endif
+{
+ xxT[0][0] = 1.0; xxT[0][1] = 0.0; xxT[0][2] = 0.0; xxT[0][3] = 0.0;
+ xxT[1][0] = 0.0; xxT[1][1] = 1.0; xxT[1][2] = 0.0; xxT[1][3] = 0.0;
+ xxT[2][0] = 0.0; xxT[2][1] = 0.0; xxT[2][2] = -1.0; xxT[2][3] = 0.0;
+ xxT[3][0] = x; xxT[3][1] = y; xxT[3][2] = z; xxT[3][3] = 1.0;
+}
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}