How to create a named compound 3D object?
- To: mathgroup at smc.vnet.net
- Subject: [mg113345] How to create a named compound 3D object?
- From: Dims <dims12 at hotmail.com>
- Date: Sun, 24 Oct 2010 06:06:49 -0400 (EDT)
I wrote a code to draw a circle in 3D:
Perp[v_] := If[v[[2]] != 0 || v[[3]] != 0,
Cross[v, {1, 0, 0}],
Cross[v, {0, 1, 0}]]
Circle3D[center_, dir_] :=
Block[{perp1, perp2, pts, factor},
perp1 = Normalize[Perp[dir]]*Norm[dir];
perp2 = Normalize[Cross[dir, perp1]]*Norm[dir];
factor = 0.6;
pts = {
center + perp1,
center + perp1 + perp2*factor,
center + perp1*factor + perp2,
center + perp2,
center - perp1*factor + perp2,
center - perp1 + perp2*factor,
center - perp1,
center - perp1 - perp2*factor,
center - perp1*factor - perp2,
center - perp2,
center - perp2 + perp1*factor,
center - perp2*factor + perp1,
center + perp1};
(*{{BezierCurve[pts],Green,Line[pts],Red,Point[pts]}};*)
BezierCurve[pts]
]
Then I create a compound object (which looks like a line,
circuferenced with serie of circles):
Rails[p1_, p2_, t_] := Block[{totlen, dirvect, preans},
totlen = Norm[p2 - p1];
dirvect = Normalize[p2 - p1];
preans = {Line[{p2, p1}]};
For[p = p1, Norm[p - p1] < totlen, p += dirvect*t,
preans = Append[preans, Circle3D[p, dirvect]]];
preans];
But unfortunately, I was to prepare an anwer as a List. But this is
not very suitable to use in Graphics, because I need to use Join to
draw:
Graphics3D[
Join[Rails[{0, 0, 0}, {10, 0, 0}, 1],
Rails[{0, 0, 0}, {0, 10, 0}, 1]]]
Is it possible to define compound object so that it can be used like
normal ones:
Graphics3D[
Rails[{0, 0, 0}, {10, 0, 0}, 1],
Rails[{0, 0, 0}, {0, 10, 0}, 1]]
?
Thanks.