4
$\begingroup$

I have a question about drawing arrows/sheets between curves. Suppose I have two 3-d parametric curves like shown below:

ParametricPlot3D[{{Cos[t], Sin[t], t}, {Cos[t + .3], Sin[t + .3], 
t}}, {t, 0, 1}]

enter image description here

I want to draw arrows between the curves at an evenly spaced interval and also (if possible) make an opaque thin sheet that covers the surface that the arrows make.

I've made a simple 2-d analog of what I mean by this. Pretending that the arrows are at an evenly spaced interval, I'm trying to make something that looks like this, but in 3-d:

enter image description here

Then, adding the sheet would look something like this: enter image description here

I think that the arrows can be made by generating a set of discrete points on each of the curves and using the Arrow command recursively, but I don't know where to start with the sheet.

$\endgroup$
1
  • $\begingroup$ Any reason for not accepting my answer? Let me know. $\endgroup$ Commented Oct 29, 2018 at 13:18

2 Answers 2

7
$\begingroup$

Here is your general curve:

f[t_, s_] := {Cos[t + s], Sin[t + s], t};
f[t_] := f[t, 0];

Define points for arrows:

int = .1;
pts1 = Table[f[t], {t, 0, 1, int}];
pts2 = Table[f[t, .3], {t, 0, 1, int}];

Build objects separately:

surf=ParametricPlot3D[f[t,s],{t,0,1},{s,0,.3},Mesh->None,PlotStyle->Opacity[.2]];

arrows=Graphics3D[{Red,Thick,Arrowheads[0.03],Arrow[#]}&/@Transpose[{pts1,pts2}]];

curves=ParametricPlot3D[{f[t],f[t,.3]},{t,0,1}];

Then combine:

Show[curves,arrows,surf]

enter image description here

Note, you can offset the step int to control direction of arrows.

int=.1;
off=.15;
pts1=Table[f[t],{t,0,1,int}];
pts2=Table[f[t,.3],{t,0-off,1-off,int}];
surf=ParametricPlot3D[f[t,s],{t,0,1},{s,0,.3},Mesh->None,PlotStyle->Opacity[.2]];
arrows=Graphics3D[{Red,Thick,Arrowheads[0.03],Arrow[#]}&/@Transpose[{pts1,pts2}]];
curve=ParametricPlot3D[{f[t],f[t,.3]},{t,0,1}];
Show[curve,arrows,surf]

enter image description here

$\endgroup$
1
$\begingroup$

An approach using a single ParametricPlot3D using the options MeshFunctions + Mesh and the Method sub-option "BoundaryOffset" -> False (to prevent clipping of mesh lines on the boundaries):

ParametricPlot3D[(1 - v) {Cos[t], Sin[t], t} + v {Cos[t + .3], Sin[t + .3], t}, 
 {t, 0, 1}, {v, 0, 1}, 
  Method -> {"BoundaryOffset" -> False},
  PlotStyle -> Opacity[.5], 
  MeshFunctions -> {#4 &, #5 &}, 
  Mesh -> {Thread[{Subdivide[10], Red}], 
   Thread[{{0, 1}, 
       Directive[AbsoluteThickness@3, Arrowheads@0, ColorData[97]@#] & /@ {1, 2}}]},
  MeshStyle -> Thick, ImageSize -> Large] /. Line -> Arrow

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.