2
$\begingroup$

I've posted before and I think (hopefully) I'm almost done. I want to make a program that models a cantilever bending on a box given parameters, like this:

enter image description here

I calculated the parametric equations (given a rotation) as:

x*Cos[θ] - (P*x^2)/(6*C*D) (3 F + x) Sin[θ]
x*Sin[θ] + (P*x^2)/(6*C*D) (3 F + x) Cos[θ]

where the first equation is x-coor and the second is y-coor. I confusingly used x as the parameter in the parametric equations.

B = 2;
Manipulate[Show[
  {Graphics[{Opacity[0.5], Red,
     Rectangle[{1, 0}, {2, 1}]},
    PlotRange -> {{-1, 2}, {-3, 3}}, Axes -> True,
    AxesOrigin -> {0, 0}],
   ParametricPlot[{x*Cos[θ] - (P*x^2)/(
       6*C*D) (3 F + x) Sin[θ], 
     x*Sin[θ] + (P*x^2)/(6*C*D) (3 F + x) Cos[θ] + 
      G}, {x, 0, B}, Axes -> True]}],
 {P, 0, 1},
 {{C, 1}, 0, 10},
 {{D, 1}, 0, 10},
 {F, 0, 10},
 {{θ, 0}, -2 π, 2 π},
 {{G, 0} , -3, 3},
 SaveDefinitions -> True]

enter image description here

Instead of slide bars, I want them to be InputFields. Further, I want adjustment of the Y axis to touch the corner of the box to be dynamic.

To find the parameter where the cantilever touches the box (corner at coordinates (a,b),

Solve[a == x*Cos[θ] - (P*x^2)/(6*C*D) (3 F + x) Sin[θ]] = c

Then, to find the needed adjustment to the y-component,

c*Sin[θ] + (P*c^2)/(6*C*D) (3 F + c) Cos[θ] -b = d

my idea is that this d is now the adjustment to the y-component of the parametric equation above. If this could be made dynamic, it would be great. I tried modifying the example application code from Wolfram.com to just output the values

DynamicModule[{a = 0, b = 0}, Deploy[Style[
       Panel[Grid[
         Transpose[{{Style["right side x-coor", Red], 
            Style["right side y-coor", Red],
            "value of x'", "y-shift"},
           {InputField[Dynamic[a], Number], 
            InputField[Dynamic[b], Number],
            InputField[
             Dynamic[
              Solve[a == x*Cos[θ] - (P*x^2)/(6*C*D) (3 F + x) Sin[θ]] = c],Enabled -> False], 
            InputField[
             Dynamic[
              c*Sin[θ] + (P*c^2)/(6*C*D) (3 F + c) Cos[θ] - b,Enabled -> False]}}],Alignment -> Right], ImageMargins -> 10, DefaultOptions -> {InputField -> {ContinuousAction -> True, FieldSize -> {{5, 30}, {1, Infinity}}}}]]]]

Obviously, it didn't work. Further, my attempts to make the plot dynamic did not work either. Perhaps I should be using Manipulate instead of Dynamic? I'm not sure. In either case, if someone could help me figure out how to get Dynamic to work with just outputting numbers and then how to get my plot inside as well (mostly the second part), that would be great.

Thanks!

$\endgroup$
  • $\begingroup$ Go to the docs for Manipulate and search for InputField. Several alternatives are described. $\endgroup$ – Michael E2 Jul 7 '16 at 21:55
  • $\begingroup$ Your DynamicModule code has unmatched delimiters ([, {, etc.). $\endgroup$ – Michael E2 Jul 7 '16 at 21:56
1
$\begingroup$

Referring to the Manipulate documentation, you can change your sliders to input fields by going from control {x,0,10} to {x,0}.

B = 2;
Manipulate[
 Show[{Graphics[{Opacity[0.5], Red, Rectangle[{1, 0}, {2, 1}]}, 
    PlotRange -> {{-1, 2}, {-3, 3}}, Axes -> True, 
    AxesOrigin -> {0, 0}], 
   ParametricPlot[{x*
       Cos[\[Theta]] - (P*x^2)/(6*C*D) (3 F + x) Sin[\[Theta]], 
     x*Sin[\[Theta]] + (P*x^2)/(6*C*D) (3 F + x) Cos[\[Theta]] + 
      G}, {x, 0, B}, Axes -> True]}], {P, 0}, {C, 1}, {D, 1}, {F, 
  0}, {\[Theta], 0}, {G, 0}, SaveDefinitions -> True]
| improve this answer | |
$\endgroup$
  • $\begingroup$ I didn't have the reputation to say this above, but I do not entirely understand your second question! Clarifying it would be appreciated. $\endgroup$ – ktm Jul 7 '16 at 21:04

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