I have a system with 3 degrees of freedom that I want to know if it is possible to visualise with Mathematica
in the two-dimensional X−Y plane. I have a plane circular object rotating at its set speed say 10 deg/s. This object is not rotating at the (0,0) origin point but is displaced from the origin (0,0) coordinates and its motion path is described by
x=x0+a×cos(ωt) and y=a×sin(ωt)
Some values: x0=1 mm; a=0.25 mm, ω=10 deg/s (same as the rotating speed of the circular object). The radius of the circular object can be taken to be a couple of cm say 2 cm.
The time parameter t in the parametric equations can be discretised in 20 steps as follows:
step=360degω×20=36010×20=1.8 s
so that step will take values 0, 1.8, 3.6, …, 34.2 s.
Thus the product ωt as the cosine and sine arguments of the parametric path can be written as
ωt=ω×step×π180
which in units gives degseconds×seconds×radiansdeg=radians.
Any help will be appreciated to this Mathematica
newbie on how to go about to simulate this kind of motion. Desired animation fatures:
Perhaps the circular object can have hatched shading so that its rotating motion can be seen on top of its following the parametric circular path;
The x− and y−axes should be visible;
The parametric path given by the parametric equations in x and y should be visible as a circle.
Answer
Lets start with some parameters (note that I've chosen larger values for a
and x0
here to actually see the movement of the centre)
radius = 20;
x0 = 10;
a = 5;
om1 = 10 Degree;
om2 = 10 Degree;
The centre of the rotating object at time t
is given by
centre[t_] := {x0 + a Cos[om1 t], a Sin[om1 t]};
I'm using RegionPlot
to create an image of the disk centred at the origin
circ = RegionPlot[x^2 + y^2 <= radius^2, {x, -radius, radius},
{y, -radius, radius},
Mesh -> 20, MeshStyle -> {{Red}, {Blue}}, BoundaryStyle -> Black,
PlotStyle -> None]
Next, we're defining a function for creating the plot at time t
. I'm using Rotate
and Translate
to get the orientation and position of the disk. The path of the centre is plotted using ParametricPlot
plot[t_] := Show[Graphics[
Translate[Rotate[{circ[[1]], Point[{0, 0}]}, om2 t], centre[t]]],
If[Abs[t] <= $MachineEpsilon, {},
ParametricPlot[centre[s], {s, 0, t}, PlotStyle -> {Black}]],
PlotRange -> {{-2 radius, 2 radius}, {-2 radius, 2 radius}},
Axes -> True]
Plugging this function into Animate
will create an animation of this function:
Animate[plot[t], {t, 0, 36}]
Comments
Post a Comment