Re: Urgent

• To: mathgroup at smc.vnet.net
• Subject: [mg27244] Re: [mg27216] Urgent
• From: Tomas Garza <tgarza01 at prodigy.net.mx>
• Date: Tue, 13 Feb 2001 03:35:49 -0500 (EST)
• References: <200102120820.DAA03811@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

For the two dimensional case

In[1]:=
long[p_] := Sqrt[Dot[p, p]]
In[2]:=
p = Table[{Random[], Random[]}, {100000}];
In[3]:=
lines = Rest[p] - Drop[p, -1];
In[4]:=
angs = Table[
ArcCos[lines[[i]].lines[[i + 1]]/(long[lines[[i]]]*
long[lines[[i + 1]]])], {i, 1, Length[lines] - 1}]; //
Timing
Out[4]=
{8.3 Second, Null}

Is this fast enough?

In[5]:=
Take[angs, 10]
Out[5]=
{2.95821, 2.94399, 1.76204, 1.37954, 3.02416, 2.75279, 1.95, 2.43478, \
2.50759, 1.16486}

(in radians, of course). You could compile the normalization of the vectors
and get a reduction in time by a factor of 2:

In[6]:=
vcom = Compile[{{x, _Real, 1}}, Module[{t}, x/Sqrt[x.x]]];
In[7]:=
angscom =
Table[ArcCos[vcom[lines[[i]]].vcom[lines[[i + 1]]]], {i, 1,
Length[lines] - 1}]; // Timing
Out[37]=
{4.89 Second, Null}

Tomas Garza
Mexico City

----- Original Message -----
From: "oda" <adj at ensm-douai.fr>
To: mathgroup at smc.vnet.net
Subject: [mg27244] [mg27216] Urgent

> Hi , all
>
> I'm currently use Mathematica 4.0 and I need to compute
> fastly the angle between  the vertices of a polygon.
> The statement of the problem is :
>
> Let be (P) a polygon with n vertices point, I want to calulate
> the angle (T) between all consecutif edge.
>
> (P) = {P1, P2, P3,.............,Pn}
> P1 is a 2 or 3 dimension point.
> angles between (PiPi+1, Pi+1Pi+2) i = 1, n-2;
>
> I have about (100000 points in polygon)
>
> Thanks in advance
>

• References:
• Urgent
• From: oda <adj@ensm-douai.fr>
• Prev by Date: Re: Bigger array taking less memory than smaller array
• Next by Date: RE: RotateShape[Cuboid...
• Previous by thread: Urgent
• Next by thread: Re: Urgent