a few geometry questions...

Jim Hurley jhurley at infostations.com
Sun Aug 7 12:23:05 EDT 2005


>
>Message: 14
>Date: Sat, 6 Aug 2005 18:53:26 -0700
>From: TJ Frame <tjframe at gmail.com>
>Subject: a few geometry questions...
>To: How to use Revolution <use-revolution at lists.runrev.com>
>Message-ID: <7348a9e80508061853214723d4 at mail.gmail.com>
>Content-Type: text/plain; charset=ISO-8859-1
>
>Hi everyone,
>  1) If I have the points A and B, how would I determine point C that lies
>along the slope but is X units in length from the origin (which will always
>be point A)
>  I can find the total distance between A and B or the midpoint using the
>distance and midpoint formulas, but I'm not sure how to plug in a specific
>distance value.
>  2) I also need to be able to find out where a circle of a given radius
>whose orgin is at A intersects that imaginary line. Given that A will always
>be the origin of the circle and I only want the single intersection heading
>towards point B I wouldn't need to check for all possible solutions such as
>non-intersection etc.
>  Any help would be greatly appreciated.. I'm an artist by trade and haven't
>messed with geometry and algebra since high school!
>  - TJ

TJ,

This may be more than you want to know. The intersection point 
between a line and a circle is a lengthy calculation. (Actually there 
a two points of intersection. See the function on how to get them 
both.)

I  have copied the function below. You can check out the 
functionality in the following stack. Run the following in the msg 
box.

    go stack url 
"http://home.infostations.net/jhurley/LineCircleIntersection.rev"

The intersection function is:

function theIntersectionPt tCircleName, aPt,bPt
   --This function determines the point of intersection
   --between the circle names tCircle name
   --and the two points aPt and bPt

   put the width of grc tCircleName /2 into a
   put theLineAngle(aPt,bPt) into ABangle
   --put 180/pi*ABangle into tempV
   put the loc of grc tCircleName into cPt
   put theLineAngle(aPt,cPt) into ACangle
   --put 180/pi*ACangle into tempC
   put ABangle - ACangle into alpha
   if alpha is 0 then add .0001 to alpha
   put theDist(aPt,cPt) into b

   --law of sines
   put  b*sin(alpha)/a into sinBeta
   if abs(sinBeta) > 1 then
     choose the browse tool
     return ""
   else
     put asin(sinBeta) into beta
   end if

   --There are two points of intersection
   --with the impact circle. Gamma defines one and
   --the other is at pi - gamma.
   --The one closest to point A is:
   put pi - beta into beta--Omit this step if you want the more distant point
   --Or get both and return both. Use the two points as needed.
   put 180/pi*beta into tempBeta
   put pi - alpha - beta into gamma
   if gamma > pi/2 then put pi-alpha-beta into gamma
   put 180/pi*gamma into tempGamma

   --Law of sines again
   put a*sin(gamma)/sin(alpha) into c
   put c*cos(ABangle)into dABx--vx/v into dBx
   put c*sin(ABangle) into dABy--vy/v into dBy
   --Get end points of line from aPt to intersection point
   put item 1 of aPt into x
   put item 2 of aPt into y
   put x+dABx,y+dABy into tInterectionPt
   return tInterectionPt
end theIntersectionPt


Jim




More information about the use-livecode mailing list