예제 #1
0
 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
예제 #2
0
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
예제 #3
0
# -*- 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)
예제 #4
0
# -*- 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.")
예제 #5
0
# -*- 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.")