# Math Math related methods - - - ## SRL.Modulo ```pascal function TSRL.Modulo(X, Y: Double): Double; static; function TSRL.Modulo(X, Y: Int32): Int32; static; overload; ``` This function returns the remainder from the division of the first argument by the second. It will always returns a result with the same sign as its second operand (or zero). Example: ```pascal Writeln(SRL.Modulo(a, b)); ``` - - - ## SRL.CrossProduct ```pascal function TSRL.CrossProduct(ry,ry, px,py, qx,qy: Double): Double; static; function TSRL.CrossProduct(r, p, q: TPoint): Int64; static; overload; ``` Cross-product of rp and rq vectors. - - - ## SRL.DeltaAngle ```pascal function TSRL.DeltaAngle(DegA, DegB: Double; R: Double = 360): Double; static; ``` Returns the shortest difference between two given angles. - - - ## SRL.DistToLine ```pascal function TSRL.DistToLineEx(pt, sA, sB: TPoint; out Nearest: TPoint): Double; static; function TSRL.DistToLine(pt, sA, sB: TPoint): Double; static; ``` Returns the distance to the nearest point on the line `sA`..`sB` - - - ## TRectangle.NearestEdge ```pascal function TRectangle.NearestEdge(P: TPoint): TPoint; constref; ``` Returns the closest edge point (think Rect.ToTPA.Connect) to the TPoint `P`. - - - ## SRL.LinesIntersect ```pascal function TSRL.LinesIntersect(p1,p2, q1,q2:TPoint; out i: TPoint): Boolean; static; function TSRL.LinesIntersect(p1,p2, q1,q2:TPoint): Boolean; static; overload; ``` Check if 2 lines cross each other. - - - ## SRL.PointInTriangle ```pascal function TSRL.PointInTriangle(const pt: TPoint; t1,t2,t3: TPoint): Boolean; static; ``` Returns True if the TPoint 'pt' is inside or on the edge triangle - - - ## SRL.PointInRect ```pascal function TSRL.PointInRect(const pt, a,b,c,d: TPoint): Boolean; static; function TSRL.PointInRect(const pt: TPoint; const rect: TRectangle): Boolean; static; overload; ``` Returns true if the TPoint 'pt' is in a rect (defined by four point. Example: ```pascal Writeln(SRL.PointInRect(Point(100, 100), [0,0], [200,1], [201,201], [0,225])); ``` - - - ## SRL.PointInCircle ```pascal function TSRL.PointInCircle(const pt, center: TPoint;const radius: Double): Boolean; static; ``` Returns True if the TPoint 'pt' is inside the circle - - - ## SRL.PointInEllipse ```pascal function TSRL.PointInEllipse(pt, Center:TPoint; YRad, XRad: Double): Boolean; static; ``` Returns True if the TPoint 'pt' is inside the ellipse - - - ## SRL.PointInPoly ```pascal function TSRL.PointInPoly(pt: TPoint; poly: TPointArray): Boolean; static; ``` Check if a point is within a polygon/shape by the given outline points (poly) The points must be in order, as if you would draw a line trough each point. ```{note} Uses winding number algorithm ``` - - - ## SRL.PointInCuboid ```pascal function TSRL.PointInCuboid(pt: TPoint; Top, Btm: TRectangle): Boolean; static; ``` Check if a point is within a cuboid defined by top and bottom rectangle.