VS:LineCircleIntersect: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
m (1 revision) |
(No difference)
|
Revision as of 14:34, 12 August 2013
.VectorScript|VectorScript ..VS:Function Reference|Function Reference ..VS:Function_Reference_Appendix|Appendix
Description
Finds the intersection points of a line and a circle.
Returns false if there is no intersection.
FUNCTION LineCircleIntersect(
begPtX, begPtY, begPtZ :REAL;
endPtX, endPtY, endPtZ :REAL;
cenPtX, cenPtY, cenPtZ :REAL;
radius :REAL;
VAR pt1X, pt1Y, pt1Z :REAL;
VAR pt2X, pt2Y, pt2Z :REAL) :BOOLEAN;
def vs.LineCircleIntersect(begPt, endPt, cenPt, radius): return (BOOLEAN, pt1, pt2)
Parameters
begPtX, begPtY, begPtZ REAL endPtX, endPtY, endPtZ REAL cenPtX, cenPtY, cenPtZ REAL radius REAL pt1X, pt1Y, pt1Z REAL Output parameter. pt2X, pt2Y, pt2Z REAL Output parameter.
Example
PROCEDURE Example; VAR cen_pt, beg_pt, end_pt :VECTOR; startAng, sweepAng, Radius :REAL; pt1, pt2 :VECTOR; PROCEDURE ArcInfo(h :HANDLE; VAR cen_pt :VECTOR; VAR startAng, sweepAng, Radius :REAL); BEGIN Hcenter(h, cen_pt.x, cen_pt.y); GetArc (h, startAng, sweepAng); IF GetType(h) = 6 THEN Radius := Hperim(h) / Deg2Rad(sweepAng) ELSE IF GetType(h) = 89 THEN Radius := 5729.28 / ((100 * Hangle(h)) / Hlength(h)); END; BEGIN CallTool(-205); ArcInfo(FSActLayer, cen_pt, startAng, sweepAng, Radius); CallTool(-201); GetSegPt1(FSActLayer, beg_pt.x, beg_pt.y); GetSegPt2(FSActLayer, end_pt.x, end_pt.y); IF LineCircleIntersect(beg_pt, end_pt, cen_pt, Radius, pt1, pt2) THEN BEGIN Locus(pt1.x, pt1.y); Locus(pt2.x, pt2.y); END; END; RUN(Example);
Version
Availability: from All Versions
This is drop-in function.