Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have a 3D graphics and i must plot a trajectory on a costant plane but i don't understand how to do this. With a simple Show[] command i can't do this.

This is the code to plot the graphics:

PMotion[mu1_,{x0_,y0_,vx0_,vy0_},tmax_,step_:10000]:=
Module[{rrule,Urule,eqMotion,r1,r2,mu,U},
rrule={r1->Sqrt[(mu+x[t])^2+y[t]^2],
r2->Sqrt[(-1+mu+x[t])^2+y[t]^2]};
Urule={U->(1-mu)/r1+mu/r2+0.5(x[t]^2+y[t]^2)};

eqMotion=
{x''[t]-2y'[t]==D[U/.Urule/.rrule,x[t]],
y''[t]+2x'[t]==D[U/.Urule/.rrule,y[t]]};
NDSolve[{eqMotion/.mu->mu1,x[0]==x0,
y[0]==y0,x'[0]==vx0,y'[0]==vy0}//
Flatten,{x,y},{t,0,tmax},
MaxSteps->step]//Flatten]

Mgraph[fx_,fy_,t_,tfinal_,Opts___]:=
ParametricPlot[{fx[t],fy[t]}//Evaluate,
{t,0,tfinal},
Opts,
AspectRatio->Automatic,
DisplayFunction->Identity];
Protect[PMotion,Mgraph];

Clear["Global`*"];

u=0.000954;
x0= 0.93902099; (*0.1;*)
y0= 0.34177569; (*0.21;*)
vx0= 0.;        (*0.133;*)
vy0= 0.;        (*0.231;*)
tfin=200.;

sol=PMotion[u,{x0,y0,vx0,vy0},tfin,50000];
fx[t_]:=x[t]/.sol;
fy[t_]:=y[t]/.sol;

pt1=Mgraph[fx,fy,t,tfin,
PlotPoints->100,
PlotStyle->Black,
Epilog->{
{
AbsolutePointSize[7], Hue[0.7],
Text["\!\(\*SubscriptBox[\(M\), \(1\)]\)",{0.000954,-0.05}],
Text["\!\(\*SubscriptBox[\(M\), \(2\)]\)",{1-0.000954,-0.05}],
{Point[{0.000954,0}],Point[{1-0.000954,0}]}
}
,
{
AbsolutePointSize[7],Hue[0.3],
Point[{x0,y0}]},
Text["\!\(\*SubscriptBox[\(x\), \(0\)]\),\!\(\*SubscriptBox[\(y\), \(0\)]\)",{x0,y0+0.06}]
}
,
DisplayFunction->$DisplayFunction,
ImageSize->700]

This is the surface and the plane:

a=0.5;
J=-3.00;

U[x_,y_,a_]:=-((1-a)/Sqrt[(x-a)^2+y^2])-a/Sqrt[(x+1-a)^2+y^2]- 0.5*(x^2+y^2);
t=
  Show[
    Plot3D[2*U[x,y,a],{x,-1.5,1.5},{y,-1.5,1.5},PlotRange->{-2.6,-4.0},Mesh->False,
    PlotStyle->Directive[Gray],AxesLabel->{Style["x",Italic,20],Style["y",Italic,20],Style["J=2U(x,y,a)",Italic,20]}],
    Plot3D[J,{x,-1.5,1.5},{y,-1.5,1.5},Mesh->False,PlotStyle->Directive[Green,Opacity[0.5]]],
  ImageSize->700]

I must plot the trajectory ON the green plan. Someone can help me please?

share|improve this question

1 Answer 1

up vote 1 down vote accepted

Is this what you want?

z0=-3;

Mgraph[fx_, fy_, t_, tfinal_, Opts___] := 
  ParametricPlot3D[{fx[t], fy[t], z0} // Evaluate, {t, 0, tfinal}, 
   Opts, AspectRatio -> Automatic, DisplayFunction -> Identity];
Protect[PMotion, Mgraph];

pt1 = Show[
  Mgraph[fx, fy, t, tfin, PlotPoints -> 100, PlotStyle -> Black, 
   DisplayFunction -> $DisplayFunction], 
  Graphics3D[{{AbsolutePointSize[7], Hue[0.7], 
     Text["\!\(\*SubscriptBox[\(M\), \(1\)]\)", {0.000954, -0.05, 
       z0}], Text[
      "\!\(\*SubscriptBox[\(M\), \(2\)]\)", {1 - 0.000954, -0.05, 
       z0}], {Point[{0.000954, 0, z0}], 
      Point[{1 - 0.000954, 0, z0}]}}, {AbsolutePointSize[7], Hue[0.3],
      Point[{x0, y0, z0}]}, 
    Text["\!\(\*SubscriptBox[\(x\), \
\(0\)]\),\!\(\*SubscriptBox[\(y\), \(0\)]\)", {x0, y0 + 0.06, z0}]}]]


Show[Plot3D[2*U[x, y, a], {x, -1.5, 1.5}, {y, -1.5, 1.5}, 
  PlotRange -> {-2.6, -4.0}, Mesh -> False, 
  PlotStyle -> Directive[Gray], 
  AxesLabel -> {Style["x", Italic, 20], Style["y", Italic, 20], 
    Style["J=2U(x,y,a)", Italic, 20]}], 
 Plot3D[J, {x, -1.5, 1.5}, {y, -1.5, 1.5}, Mesh -> False, 
  PlotStyle -> Directive[Green, Opacity[0.5]]], pt1, ImageSize -> 700]

enter image description here

share|improve this answer
    
Yes this is the right solution!!!!!!!!!!!!!!!! Thanks a lot ! –  federico Apr 19 '13 at 17:34

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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