DIRECTORY SV2d; SVLines2d: DEFINITIONS = BEGIN LineSeg: TYPE = REF LineSegObj; LineSegObj: TYPE = SV2d.LineSegObj; Point2d: TYPE = SV2d.Point2d; Ray2d: TYPE = REF Ray2dObj; Ray2dObj: TYPE = SV2d.Ray2dObj; TrigLine: TYPE = REF TrigLineObj; TrigLineObj: TYPE = SV2d.TrigLineObj; TrigLineSeg: TYPE = REF TrigLineSegObj; TrigLineSegObj: TYPE = SV2d.TrigLineSegObj; Vector2d: TYPE = SV2d.Vector2d; CreateEmptyTrigLine: PUBLIC PROC RETURNS [line: TrigLine]; FillTrigLineFromPoints: PROC [v1, v2: Point2d, line: TrigLine]; FillTrigLineFromCoefficients: PROC [sineOfTheta, cosineOfTheta, distance: REAL, line: TrigLine]; FillTrigLineAsNormal: PROC [line: TrigLine, pt: Point2d, normalLine: TrigLine]; CopyTrigLine: PROC [from: TrigLine, to: TrigLine]; TrigLineFromPoints: PROC [v1, v2: Point2d] RETURNS [line: TrigLine]; TrigLineFromCoefficients: PROC [sineOfTheta, cosineOfTheta, distance: REAL] RETURNS [line: TrigLine]; TrigLineNormalToTrigLineThruPoint: PROC [line: TrigLine, pt: Point2d] RETURNS [normalLine: TrigLine]; TrigLineMeetsTrigLine: PROC [line1, line2: TrigLine] RETURNS [intersection: Point2d, parallel: BOOL]; TrigLineMeetsYAxis: PROC [line: TrigLine] RETURNS [yInt: REAL, parallel: BOOL]; TrigLineMeetsTrigLineSeg: PROC [line: TrigLine, seg: TrigLineSeg] RETURNS [intersection: Point2d, noHit: BOOL]; TrigLineDistance: PROC [pt: Point2d, line: TrigLine] RETURNS [d: REAL]; PointProjectedOntoTrigLine: PROC [pt: Point2d, line: TrigLine] RETURNS [projectedPt: Point2d]; CreateTrigLineSeg: PROC [v1, v2: Point2d] RETURNS [seg: TrigLineSeg]; CreateEmptyTrigLineSeg: PROC RETURNS [seg: TrigLineSeg]; FillTrigLineSeg: PROC [v1, v2: Point2d, seg: TrigLineSeg]; CopyTrigLineSeg: PROC [from: TrigLineSeg, to: TrigLineSeg]; TrigLinePointOnTrigLineSeg: PROC [pt: Point2d, seg: TrigLineSeg] RETURNS [BOOL]; NearestEndpoint: PROC [pt: Point2d, seg: TrigLineSeg] RETURNS [endpoint: Point2d]; DistanceSquaredToNearestEndpoint: PUBLIC PROC [pt: Point2d, seg: TrigLineSeg] RETURNS [distanceSquared: REAL]; DistancePointToTrigLineSeg: PROC [pt: Point2d, seg: TrigLineSeg] RETURNS [distance: REAL]; DistanceSquaredPointToTrigLineSeg: PROC [pt: Point2d, seg: TrigLineSeg] RETURNS [distanceSquared: REAL]; DistancePointToPoint: PROC [p1, p2: Point2d] RETURNS [distance: REAL]; DistanceSquaredPointToPoint: PROC [p1, p2: Point2d] RETURNS [distance: REAL]; PointLeftOfTrigLine: PROC [distance: REAL, pOnLine: Point2d, line: TrigLine] RETURNS [point: Point2d]; CreateLineSeg: PROC [v1, v2: Point2d] RETURNS [seg: LineSeg]; CreateRay: PROC [basePoint: Point2d, direction: Vector2d] RETURNS [ray: Ray2d]; CreateRayFromPoints: PROC [p1, p2: Point2d] RETURNS [ray: Ray2d]; RightHorizontalRay: PROC [point: Point2d] RETURNS [horizRayThruPoint: Ray2d]; UpVerticalRay: PROC [point: Point2d] RETURNS [vertRayThruPoint: Ray2d]; RayMeetsBox: PROC [ray: Ray2d, xmin, ymin, xmax, ymax: REAL] RETURNS [count: NAT, params: ARRAY[1..2] OF REAL]; LineRayMeetsBox: PROC [ray: Ray2d, xmin, ymin, xmax, ymax: REAL] RETURNS [count: NAT, params: ARRAY[1..2] OF REAL]; EvalRay: PROC [ray: Ray2d, param: REAL] RETURNS [point: Point2d]; END. :File: SVLines2d.mesa Author: Eric Bier on October 1, 1982 9:02 pm Last edited by Bier on August 12, 1983 10:37 pm Contents: Routines for finding the intersections of various types of lines and line segments used in the SolidViews package. TRIGLINES TRIGLINESEGS assumes pt is on seg.line. Is it on seg? faster than DistancePointToPoint[pt, NearestEndpoint[pt, seg]] (if you don't care what the endpoint is). perpendicular distance if possible, else distance to nearest endpoint. POINT2DS point is a point to the left of the directed line, on the normal to the line which intersects the line at pOnLine. If distance is negative, the point will be to the right of the directed line. LINESEGS RAYS Find intersections of the directed half-line only. Ignore the direction of the ray. Find all of the line intersections. Κ– "cedar" style˜Iheadšœ™Iprocšœ,™,Lšœ/™/Lšœ}™}L˜šΟk ˜ Lšœ˜—L˜Lšœ  œ˜Lš˜˜Lšœ œœ ˜Lšœ œ˜#Lšœ œ˜Lšœœœ ˜Lšœ œ˜Lšœ œœ ˜!Lšœ œ˜%Lšœ œœ˜'Lšœœ˜+Lšœ œ˜L˜L˜—šœ ™ L˜LšΟnœœœœ˜:Lšžœœ#˜?Lšžœœ(œ˜`Lšžœœ5˜OLšž œœ ˜2Lšžœœœ˜DLšžœœ(œœ˜eLšž!œœœ˜eLšžœœœ#œ˜eLš žœœœœ œ˜OLšžœœ$œ œ˜oLšžœœœœ˜GLšžœœœ˜^L˜L˜—šœ ™ L˜Lšžœœœ˜ELšžœœœ˜8Lšžœœ%˜:Lšžœœ&˜;Lšžœœ!œœ˜PLšœ)™)Lšžœœ!œ˜RLš ž œœœ!œœ˜nLšœh™hLšžœœ!œ œ˜ZLšœF™FLšž!œœ!œœ˜hL˜L˜—šœ™L˜Lšžœœœ œ˜FLšžœœœ œ˜MLšžœœ œ$œ˜fLšœΑ™ΑL˜—šœ ™ L˜Lšž œœœ˜=L˜—šœ™L˜Lšž œœ+œ˜OLšžœœœ˜ALšžœœœ˜MLšž œœœ˜Gšž œœ&œœ œ œœœ˜oL™2—šžœœ&œœ œ œœœ˜sL™E—Lšžœœœœ˜AL˜—L˜Lšœ˜—…— 4q