Re: Problem with finding angles between points in Cartesian plane
- To: mathgroup at smc.vnet.net
- Subject: [mg26113] Re: [mg26060] Problem with finding angles between points in Cartesian plane
- From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
- Date: Tue, 28 Nov 2000 01:56:00 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Here is another, essentially equivalent, approach which you may like better
since it is more like your original attempt:
In[1]:=
angle[P_, Q_] := ArcTan[(P - Q)[[1]], (P - Q)[[2]]]
In[2]:=
angle[{3, 5}, {3, 4}]
Out[2]=
Pi
--
2
In[3]:=
angle[{3, 4}, {3, 5}]
Out[3]=
Pi
-(--)
2
In[4]:=
angle[{x1, y1}, {x1, y2}]
Out[4]=
ArcTan[0, y1 - y2]
In[5]:=
FullSimplify[%, y2 > y1]
General::"dbyz": "Division by zero."
Out[5]=
Pi
-(--)
2
--
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/
http://sigma.tuins.ac.jp/
on 00.11.22 8:29 PM, Andrzej Kozlowski at andrzej at tuins.ac.jp wrote:
> When I saw your question I could not understand what you meant by the "angle
> between two points"? There is really no such thing. At first I assumed you
> meant the angle between the two vectors corresponding to two points, but
> looking at your formula I realized that you seemed to mean the angle that the
> line through the two points makes with the x-axis (?).
>
> Well, here is one (out of very many) ways that will compute this without
> running into your problem:
>
> angle[P_, Q_] := Arg[(Q - P).{1, I}]
>
> Now we get:
>
> In[3]:=
> angle[{3, 4}, {3, 5}]
>
> Out[3]=
> Pi/2
>
> However, this angle actually depend on the order in which the points are
> given:
>
> In[4]:=
> angle[{3, 5}, {3, 4}]
>
> Out[4]=
> -(Pi/2)
>
> If you prefer the answer not to depend on the order of the points you can do
> this:
>
> ClearAll[angle]
>
> SetAttributes[angle, Orderless]
>
> angle[P_, Q_] := Arg[(Q - P).{1, I}]
>
>
> Now we get:
>
> In[8]:=
> angle[{3, 5}, {3, 4}]
>
> Out[8]=
> Pi/2
>
> In[9]:=
> angle[{3, 4}, {3, 5}]
>
> Out[9]=
> Pi/2
>
>
> Another possible objection may be that this does definition of angle does not
> work with symbolic expressions, in other words with your original example we
> get:
>
> In[13]:=
> angle[{x1, y1}, {x1, y2}]
>
> Out[13]=
> Arg[I*(-y1 + y2)]
>
> This however is really the way it should be since Mathematica know nothing
> about y1 and y2 (they might be equal or complex !). In such cases its best to
> apply FullSimplify:
>
> In[14]:=
> FullSimplify[%, y2 > y1]
>
> Out[14]=
> Pi/2
>
> --
> Andrzej Kozlowski
> Toyama International University
> JAPAN
>
> http://platon.c.u-tokyo.ac.jp/andrzej/
> http://sigma.tuins.ac.jp/
>
>
> on 00.11.22 3:55 PM, Blitzer at drek1976 at yahoo.com wrote:
>
>> I would like to find the angle between 2 points on the Cartesian plane.
>> However, if I use "ArcTan", it is not able to recognise that points with the
>> same x-coordinates have an angle of 90 degrees between them. It returns
>> "Indeterminate".
>> eg. for a point A (x1, y1) and a point (x1, y2), to find the angle between
>> them, I use ArcTan[(y2-y1)/(x1-x1)]. However, as the denominator is equal to
>> "0", this function returns "indeterminate". Is there a way to get around
>> this problem? Or is there other possible functions which can be used.
>> I am dealing with a very large array of numbers and thus, it's not possible
>> to check the coordinates individually.
>>
>> Would be grateful for any help rendered. Thanks!
>>
>> Derek
>>
>>
>>
>>
>>
>