Пример #1
0
 def Centroid(points):
     xsum = 0.0
     ysum = 0.0
     for p in points:
         xsum += p.X
         ysum += p.Y
     return PointR(xsum / len(points), ysum / len(points))
Пример #2
0
    def Resample(points, n):
        I = 1.0 * Utils.PathLength(points) / (n-1)
        D = 0.0
        srcPts = []
        for p in points:
            srcPts.append(p[:])
        dstPts = []
        dstPts.append(srcPts[0][:])
        counts = len(srcPts)
        i = 1
        while i < counts:
            pt1 = srcPts[i-1]
            pt2 = srcPts[i]

            d = Utils.Distance(pt1, pt2)
            if (D+d) >= I:
                qx = pt1.X + ((I - D) / d) * (pt2.X - pt1.X)
                qy = pt1.Y + ((I - D) / d) * (pt2.Y - pt1.Y)
                q = PointR(qx, qy)
                dstPts.append(q)
                srcPts.insert(i, q[:])
                counts += 1
                D = 0.0
            else:
                D += d
            i += 1
        if len(dstPts) == n-1:
            dstPts.append(srcPts[len(srcPts) -1][:])
        return dstPts
Пример #3
0
    def RotateByRadians(points, radians):
        newPoints = []
        c = Utils.Centroid(points)

        cos = math.cos(radians)
        sin = math.sin(radians)

        cx = c.X
        cy = c.Y

        counts = len(points)
        for i in range(counts):
            p = points[i]
            dx = p.X - cx
            dy = p.Y - cy
            q = PointR()
            q.X = dx * cos - dy * sin + cx
            q.Y = dx * sin + dy * cos + cy
            newPoints.append(q)
        return newPoints
Пример #4
0
    def ReadGesture(self, root):
        if root.tag != "Gesture":
            return None
        name = root.get("Name")

        points = []
        plist = root.findall("Point")
        for p in plist:
            qx = string.atof(p.get("X"))
            qy = string.atof(p.get("Y"))
            qt = string.atoi(p.get("T"))
            q = PointR(qx,qy,qt)
            points.append(q)
        return Gesture(name, points)
Пример #5
0
 def Center(self):
     return PointR(self.X+self.Width/2.0, self.Y+self.Height/2.0)
Пример #6
0
 def BottomRight(self):
     return PointR(self.X+self.Width, self.Y+self.Height)
Пример #7
0
 def TopLeft(self):
     return PointR(self.X,self.Y)
Пример #8
0
 def RotatePoint(p, c, radians):
     q = PointR()
     q.X = (p.X - c.X) * math.cos(radians) - (p.Y - c.Y) * math.sin(radians) + c.X
     q.Y = (p.X - c.X) * math.sin(radians) + (p.Y - c.Y) * math.cos(radians) + c.Y
     return q