(*
*
* CSPlotter.m - A plotter for Contact structures in R^3
*
* Matias Dahl 2002-2005
*
*
* Mathematica package for plotting contact structures
* in R^3. (Tested with Mathematica v5.0.1.)
*
* For more information on the use of this package, see
* the project page at
* www.math.hut.fi/~fdahl/CSPlotter/
*
* Please feel free to do whatever you want with this
* code. If you think it is appropriate, you may mention
* this package, but that is not required. For example,
* in a poster or on slides, this would be completely
* irrelevant information.
*
*)
<< Graphics`Shapes`
<< Calculus`VectorAnalysis`
(*
* Rotvect[v]
*
* Suppose v is a non-zero vector in R^3. Then
* Rotvect[v] is a 3x3 matrix representing the
* rotational matrix (an orthogonal matrix with det = 1)
* such that R.(0, 0, 1) points in the direction of v.
*
*)
Rotvect[v_] :=
Module[
{ex, ey, ez},
If[v[[1]] == 0 && v[[2]] == 0,
Return[{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}];
];
ez = v/Sqrt[v.v];
ey = 1/Sqrt[v[[1]]^2 + v[[2]]^2] {-v[[2]], v[[1]], 0};
ex = Cross[ey, ez];
Transpose[{ex, ey, ez}]
]
(*
* contactelement[disp, covect, scale]
*
* Returns a rectange centered at 'disp', normal to 'covect'
* and of size 'scale' as a Mathematica Graphics3D object.
*
*)
contactelement[disp_, covect_, scale_] :=
Module[
{P, b1, b2, b3, b4},
b1 = {-1/2, -1/2, 0}; b2 = {-1/2, 1/2, 0}; b3 = {1/2, 1/2, 0};
b4 = {1/2, -1/2, 0};
P = Rotvect[covect];
gs = Graphics3D[Polygon[scale{ P.b1, P.b2, P.b3, P.b4}], Boxed -> False,
PlotRange -> All];
gs = TranslateShape[gs, disp]
]
(*
* coords[xmax, ymax, zmax]
*
* returns (as a Mathematica Graphics3D object) coordinate
* axes of lengths 'xmax', 'ymax', and 'zmax', respectively.
*)
coords[xmax_, ymax_, zmax_] :=
Graphics3D[
{
Line[{{0, 0, 0}, {0, 0, zmax}}],
Line[{{0, 0, 0}, {0, ymax, 0}}],
Line[{{0, 0, 0}, {xmax, 0, 0}}],
Text["x", {xmax + 0.25, 0, 0}],
Text["y", {0, ymax + 0.25, 0}],
Text["z", {0, 0, zmax + 0.25}]
},
PlotRange -> All]
|
Last modified 31.1.2006.