Re: Dynamically finding distances and angles between user-specified points
- To: mathgroup at smc.vnet.net
- Subject: [mg125147] Re: Dynamically finding distances and angles between user-specified points
- From: Tomas Garza <tgarza10 at msn.com>
- Date: Fri, 24 Feb 2012 00:59:20 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
Try the following, which is a minor arrangement of your code. The angles are given in degrees:
Manipulate[Module[{r = 0.03, p1, p2, p3, p4, a = 1, b = 1, angABC, angDEF, angABE}, p1 = {a, b}; p2 = {-a, b}; p3 = {-a, -b}; p4 = {a, -b}; angABC = VectorAngle[p1 - p5, p2 - p5]; angDEF = VectorAngle[p4 - p6, p3 - p6]; angABE = VectorAngle[p1 - p5, p6]; Graphics[{{Red, Table[Disk[i, r], {i, {p1, p2, p3, p4}}]}, {Black, Table[Disk[i, r], {i, {p5, p6}}]}, {Text[Style["(xB, yB)", 18], p5, {-1.2, 0}], Text[Style["(xE, yE)", 18], p6, {-1.2, 0}], Text[Style["A", Red, 18], p1, {-1.8, 0}], Text[Style["C", Red, 18], p2, {1.8, 0}], Text[Style["F", Red, 18], p3, {1.8, 0}], Text[Style["D", Red, 18], p4, {-1.8, 0}], Text[Style["B", 18], p5, {-1, -1}], Text[Style["E", 18], p6, {-1, 1.5}], Line[{p1, p5, p2}], Line[{p3, p6, p4}], {Thickness[0.01], Line[{p5, p6}]}, Text[Style[ "\[Angle]ABC = " <> ToString[NumberForm= [180. angABC/\[Pi], {3, 0}]] <> "\[Degree]", 14], {0.6, 0.6}, {-1, 0}], Text[ Sty
l!
e["\[Angle]DEF = " <> ToString[NumberForm[180. angDEF/\[Pi], {3, 0}]] <> "\[Degree]", 14], {0.6, 0.5}, {-1, 0}], Text[Style[ "\[Angle]ABE = " <> ToString[NumberForm[180. angABE/\[Pi], {3, 0}]] <> "\[Degree]", 14], {0.6, 0.4}, {-1,0}], Text[Style[ "AB = " <> ToString[NumberForm[Norm[p1 - p5],{4, 3}]], 14], {0.6, 0.3}, {-1, 0}], Text[Style[ "BE = " <> ToString[NumberForm[Norm[p6 - p5], {4, 3}]], 14], {0.6, 0.2}, {-1, 0}]}}, Axes -> True, PlotRange -> {{-1.5, 1.5}, {-1.5, 1.5}}, ImageSize -> 450]], {{p5, {0, 0.5}, "B"}, {-0.25, 0}, {0.5, 1}}, {{p6, {0, -0.5}, "E"}, {-1, -1}, {0.25, -0.25}}]
-Tomas
> Date: Thu, 23 Feb 2012 05:46:44 -0500
> From: adeyoung at andrew.cmu.edu
> Subject: Dynamically finding distances and angles between user-specified points
> To: mathgroup at smc.vnet.net
>
> Hi,
>
> I wish to create a simple Manipulate-type interactive "applet" in
> which the user can control the (x,y) coordinates of two points, which
> I will call points B and E. (Suppose that B has coordinates (xB,yB)
> and E has coordinates (xE,yE).) Now suppose there are points A, C, D,
> and F which are fixed in space. A and B, B and C, B and E, D and E,
> and E and F are connected by line segments. I would like to write a
> Manipulate-type dynamic "applet" that prints the values of various
> line segments (for example, of line segments AB and BE) and of various
> angles (for example, of angles ABC, DEF, and ABE), preferably updated
> dynamically.
>
> I have posted a figure showing these points and their relation to one
> another:
>
> http://www.andrew.cmu.edu/user/adeyoung/feb22/figure.gif
>
> I made the above posted figure with the following commands:
>
> (* Begin code *)
> r = 0.03;
> a = 1;
> b = 1;
> p1 = {a, b};
> p2 = {-a, b};
> p3 = {-a, -b};
> p4 = {a, -b};
> p5 = {0, 0.5};
> p6 = {0, -0.5};
>
> Show[{
> Graphics[{Red, Table[Disk[i, r], {i, {p1, p2, p3, p4}}]},
> Axes -> True, AxesLabel -> {"x", "y"}, AspectRatio -> 1],
> Graphics[{Black, Table[Disk[i, r], {i, {p5, p6}}]}],
> Graphics[{
> Text[Style["(xB, yB)", 18], p5, {-1.2, 0}],
> Text[Style["(xE, yE)", 18], p6, {-1.2, 0}],
> Text[Style["A", Red, 18], p1, {-1.8, 0}],
> Text[Style["C", Red, 18], p2, {1.8, 0}],
> Text[Style["F", Red, 18], p3, {1.8, 0}],
> Text[Style["D", Red, 18], p4, {-1.8, 0}],
> Text[Style["B", 18], p5, {-1, -1}],
> Text[Style["E", 18], p6, {-1, 1.5}],
> Line[{p1, p5, p2}],
> Line[{p3, p6, p4}],
> {Thickness[0.01], Line[{p5, p6}]},
> Text[Style["\[Angle]ABC = ?", 14], {0.6, 0.6}, {-1, 0}],
> Text[Style["\[Angle]DEF = ?", 14], {0.6, 0.5}, {-1, 0}],
> Text[Style["\[Angle]ABE = ?", 14], {0.6, 0.4}, {-1, 0}],
> Text[Style["AB = ?", 14], {0.6, 0.3}, {-1, 0}],
> Text[Style["BE = ?", 14], {0.6, 0.2}, {-1, 0}]
> }]
> }]
> (* End code *)
>
> My question is, do you have any advice for computing the distances and
> angles dynamically? Do you recommend that I use a Locator or a
> Slider2D control object? Also, do you think that I can compute the
> angles dynamically using the following vector relation?
>
> pvector (dot product) qvector = Norm[pvector]*Norm[qvector]*Cos[\
> [Theta]]
>
> where \[Theta] is the angle between pvector and qvector. So \[Theta]
> is:
>
> \[Theta] = ArcCos[Dot[pvector, qvector]/(Norm[pvector]*Norm[qvector])]
>
> If, for example, I want to find the angle ABC, then pvector is the
> vector from A to B (or from B to A) and qvector is the vector from B
> to C (or from C to B).
>
> Thanks so much for your time.
>
> Andrew DeYoung
> Carnegie Mellon University
>