python计算矩形的丢失坐标

时间:2018-12-31 00:35:28

标签: python vector rotation coordinates

我在计算缺少的矩形坐标时遇到问题。给定矩形的两个点,例如P1和P2(图像上的蓝色圆圈),我需要计算丢失的坐标P0和P3。矩形的大小是预定义的,我知道P0和P1之间以及P1和P2之间的距离。

例如,下面是定义矩形的坐标,但是假设第一个点和最后一个点(p0和p3)是未知的,我会尝试找到它们。

Len1 = 503 Len2 = 752

[(61,61),(564,55),(573,807),(70,817)]

enter image description here

我写了一个基于P1和P2计算P0的代码,但是看起来很丑,我觉得必须有更好的方法。我的目标远非能够根据其他两个可用点(这将有所不同)得出任何两个缺失点。除此之外,还有一个问题,就是对象的方向可能会有所不同。该功能应识别出,即使图像上下颠倒放置,P0始终位于左上角等。

这是我到目前为止所做的

import math

def calcAngle2Vectors(p0,p1,p2):
    #calculates angle between two vectors
    #p1 is a centre point
    a = (p1[0]-p0[0])**2 + (p1[1]-p0[1])**2
    b = (p1[0]-p2[0])**2 + (p1[1]-p2[1])**2
    c = (p2[0]-p0[0])**2 + (p2[1]-p0[1])**2
    ang = math.acos( (a+b-c) / math.sqrt(4*a*b) ) * 180/math.pi
    return ang

def interpolateMissingPoints():
    # in real case one or two coords will be NaN e.g. 
    # coords = [Nan, (564.0, 55.0), (573.0, 807.0), Nan]

    coords = [(61.0, 61.0), (564.0, 55.0), (573.0, 807.0), (70.0, 817.0)]

    #Other coords of the same object under different angles:
    #coords = [(809.0, 61.0), (815.0, 564.0), (63.0, 573.0), (53.0, 70.0)]
    #coords = [(558.0, 809.0), (55.0, 815.0), (46.0, 63.0), (549.0, 53.0)]    
    #coords = [(61.0, 558.0), (55.0, 55.0), (807.0, 46.0), (817.0, 549.0)]

    #calculate the angle of the
    point_A = coords[1]
    point_B = coords[2]
    point_C = (0,coords[2][1])

    angle = (calcAngle2Vectors(point_A,point_B,point_C))-90

    Len1 = 503

    if point_A[1] > point_B[1]:
        #orientation - normal
        x2 = int(coords[1][0] + math.cos(math.radians(angle)) * Len1)
        y2 = int(coords[1][1] - math.sin(math.radians(angle)) * Len1)
    else:
        #orientation - upside down
        x2 = int(coords[1][0] - math.cos(math.radians(angle)) * Len1)
        y2 = int(coords[1][1] - math.sin(math.radians(angle)) * Len1)

    print ("x2 "+ str(x2))
    print ("y2 "+ str(y2))

interpolateMissingPoints()

关于如何实现这一目标的任何想法?

0 个答案:

没有答案