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>
- Urgent