我正在尝试将三角形分成两半。三角形可以任意旋转,但始终可以等分为两半(等腰三角形不是等边的)。
我想到了如何将任意旋转的三角形分成2个子三角形,但是它很幼稚,需要检查该三角形是哪个旋转。
有没有更简单的方法将三角形分成两半?
下面是我要实现的示例。图像1是我原来的三角形,然后我的函数将在每个三角形上运行以生成图像2,然后我的函数将在每个三角形上再次运行并生成图像3。
def split_triangle_evenly(tri_pts):
# Pre: tri_pts[1] will always be the split point
# ie, tri_pts[1] is the right-angle
half_tri1 = None
half_tri2 = None
break_x = tri[1][0]
break_y = tri[1][1]
# Naive technique that needs to check the rotation of the triangle
# in order to figure out how to split it
# is there a simplier way?
if break_x > tri[0][0] and break_x > tri[2][0]:
half_tri1 = (
tri[0],
(tri[0][0], break_y),
tri[1]
)
half_tri2 = (
tri[2],
(tri[0][0], break_y),
tri[1]
)
elif break_x < tri[0][0] and break_x < tri[2][0]:
...
elif ...
return (half_tri1, half_tri2)
答案 0 :(得分:0)
如果您的等腰三角形具有折断顶点tri_pnts[1]
,那么对于任何方向,对边的折断点都是
breakpnt[0] = (tri_pnts[0][0] + tri_pnts[2][0]) / 2
breakpnt[1] = (tri_pnts[0][1] + tri_pnts[2][1]) / 2
half_tri1 = (
tri[0],
breakpnt,
tri[1]
)
half_tri2 = (
tri[1],
breakpnt,
tri[2]
)
因为等腰三角形的中位数将其分成两个相似的三角形。
是否需要提供生成的三角形顶点的特定方向?这段代码为两个三角形(或CW或CCW)提供了相似的方向-如果重要的话...