给定(象限i)中构成直角三角形的三个(x,y)点,求三角形的方位



这个问题看起来很简单,但我的数学不太好,因此很有挑战性。在这一点上,我几乎得出了这样的结论,即可能没有解决方案,然而,我对数学所知甚少,似乎总是有一个解决方案适合你们这些更知情的人。

我在2D平面上有三个(x,y(度,它们形成了一个(几乎(直角三角形(即94或87度,这确实会变化,但总是在几度内(。顶点总是在正轴上;Q1";,(我正在处理像素数据(。

我需要的是找到360度三角形的方向:

  • 对于所有四个象限,腿(opp&adj(总是相对于(假想的(x,y轴,因此斜边总是朝外
  • 三角形:
    • q i-90度
    • q ii-180度
    • q iii-270度
    • q iv-0度

我已经尝试了这个论坛上的各种建议中的许多解决方案,目前我正在使用这个解决方案,但它并不完全适用于我。
https://stackoverflow.com/a/15442539/14398314

任何建议都将不胜感激,使用的语言是python。

编辑:下图表示输入数据和所需的解决方案。输入和输出数据的图像

干杯

步骤1:识别三角形靠近(几乎(直角的角

如果3个角是A、B、C,则构建点积AB*BCAC*CBAB*AC。最低的点积是边接近直角的点积,点积中出现两次的角是接近直角的角。

第2步:现在你知道了几乎是直角的角(假设它是A(,计算AB和AC边在x和y方向上的位移(AB_DeltaX、AB_Delta y、AC_Delta x和AC_DeltaY(,并为每一边只保留绝对值最大的那一边。象限可以通过以下表格找到:

90 : deltaX and deltaY are both positive
180: deltaX < 0 and deltaY > 0
270: both negative
0  : deltaY <0, deltaX > 0

这里有一个简单的实现:

a = (4.2,0.1)
b = (3.1,4.2)
c = (0.1,3.2)

def get_q(a,b,c):
#step 1
ab = (b[0] - a[0], b[1] - a[1])
ac = (c[0] - a[0], c[1] - a[1])
ba = (a[0] - b[0], a[1] - b[1])
bc = (c[0] - b[0], c[1] - b[1])
ca = (a[0] - c[0], a[1] - c[1])
cb = (b[0] - c[0], b[1] - c[1])
dp1 = abs(ab[0] * bc[0] + ab[1] * bc[1])
dp2 = abs(ac[0] * cb[0] + ac[1] * cb[1])
dp3 = abs(ab[0] * ac[0] + ab[1] * ac[1])
# find minimum
if dp1 < dp2 and dp1 < dp3:
corner = 'B'
delta1 = ba
delta2 = bc
elif dp2 < dp1 and dp2 < dp3:
corner = 'C'
delta1 = ca
delta2 = cb
elif dp3 < dp1 and dp3 < dp2:
corner = 'A'
delta1 = ab
delta2 = ac
else:
corner = 'unknown'
delta1 = (0.0, 0.0)
delta2 = (0.0, 0.0)
# Step 2
if abs(delta1[0]) > abs(delta2[0]):
deltaX = delta1[0]
else:
deltaX = delta2[0]
if abs(delta1[1]) > abs(delta2[1]):
deltaY = delta1[1]
else:
deltaY = delta2[1]
if deltaX > 0 and deltaY > 0:
quadrant = 'Q1'
elif deltaX < 0 and deltaY < 0:
quadrant = 'Q3'
elif deltaX < 0 and deltaY > 0:
quadrant = 'Q2'
elif deltaX > 0 and deltaY < 0:
quadrant = 'Q4'
else:
quadrant = 'unknown'
return quadrant

最新更新