def getIntersectionWith3DSegment(self, segment3d): retval = [] p0 = segment3d.getFromPoint() p1 = segment3d.getToPoint() P0proj = geom.Pos2d(p0.x, p0.y) P1proj = geom.Pos2d(p1.x, p1.y) segment2d = geom.Segment2d(P0proj, P1proj) proj = self.xyPline.getIntersectionWithSegment(segment2d) for p in proj: lmb = p.distPos2d(P0proj) / P1proj.distPos2d(P0proj) pInt = segment3d.getPoint(lmb) retval.append(pInt) return retval
def distXYToPline(p, pline): p2d = geom.Pos2d(p[0], p[1]) p0 = pline[0] p02d = geom.Pos2d(p0[0], p0[1]) d = p2d.distPos2d(p02d) sz = len(pline) for i in range(1, sz): p1 = pline[i] p12d = geom.Pos2d(p1[0], p1[1]) s = geom.Segment2d(p02d, p12d) ds = s.distPos3d(p2d) d = min(d, ds) p0 = p1 p02d = geom.Pos2d(p0[0], p0[1]) return d
# -*- coding: utf-8 -*- import xc_base import geom import math u=geom.Vector2d(1,0) ptoOrigen=geom.Pos2d(0,0) ptoDestino=geom.Pos2d(1,1) s=geom.Segment2d(ptoOrigen,ptoDestino) alpha=s.angleVector(u) ratio1= math.degrees(alpha)-45 ptoDestino=geom.Pos2d(0,1) s=geom.Segment2d(ptoOrigen,ptoDestino) alpha=s.angleVector(u) ratio2= math.degrees(alpha)-90 ptoDestino=geom.Pos2d(-1,1) s=geom.Segment2d(ptoOrigen,ptoDestino) alpha=s.angleVector(u) ratio3= math.degrees(alpha)-135 ptoDestino=geom.Pos2d(-1,0) s=geom.Segment2d(ptoOrigen,ptoDestino) alpha=s.angleVector(u) ratio4= math.degrees(alpha)-180 ptoDestino=geom.Pos2d(-1,-1) s=geom.Segment2d(ptoOrigen,ptoDestino) alpha=s.angleVector(u)
# -*- coding: utf-8 -*- from __future__ import print_function import xc_base import geom import math fromPoint = geom.Pos2d(0, 0) toPoint = geom.Pos2d(10, 0) s1 = geom.Segment2d(fromPoint, toPoint) s2 = s1.offsetDouble(2) s3 = s1.offsetDouble(-2) p1 = s2.getCenterOfMass() p2 = s3.getCenterOfMass() ratio1 = math.fabs(p1.dist(p2) - 4) import os fname = os.path.basename(__file__) if ratio1 < 1e-15: print("test ", fname, ": ok.") else: print("test ", fname, ": ERROR.")
# -*- coding: utf-8 -*- '''Compute the intersection of a line with a segment.''' from __future__ import print_function import xc_base import geom import math sg = geom.Segment2d(geom.Pos2d(-0.443, 0.443), geom.Pos2d(-0.443, -0.443)) sr = geom.Ray2d(geom.Pos2d(0.19855, -0.082042), geom.Pos2d(-39.7765, 16.6642)) p = sg.getIntersectionWithRay(sr)[0] d = sr.distPos2d(p) #print('d2= ', d) import os fname = os.path.basename(__file__) if (d < 1e-15): print("test ", fname, ": ok.") else: print("test ", fname, ": ERROR.")
# -*- coding: utf-8 -*- '''Compute the intersection of a line with a segment.''' from __future__ import print_function import xc_base import geom import math s = geom.Segment2d(geom.Pos2d(0.443, 0.), geom.Pos2d(0.443, 0.443)) r = geom.Line2d(geom.Pos2d(1.0, 0.0116016), geom.Pos2d(-4735.73, 0.0116019)) #In lines doesn't intersect the list well be empty. p = s.getIntersectionWithLine(r)[0] ratio1 = math.fabs(p.x - 0.443) ratio2 = math.fabs(p.y - 0.0116016) ''' print('p= ', p) print('ratio1= ', ratio1) print('ratio2= ', ratio2) ''' import os fname = os.path.basename(__file__) if ratio1 < 1e-20 and ratio2 < 1e-10: print("test ", fname, ": ok.") else: print("test ", fname, ": ERROR.")