在lin上画一条给定角度和点的线

2024-06-15 05:58:56 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的图像中,我有一个三角形(代表一个箭头)。此箭头定义了在同一图像中进一步搜索时考虑的方向和区域。例如,如果我有一个三角形,以30度w.r.t x轴旋转,它的尖端在图像中位于(250150)。我想找到并画一条垂直于三角形顶端的线,如下图所示。在

Arrow and the Normal to it's tip

在上面的图片中,我有一个三角形中的蓝线的角度,法线要画到这个角度。三角形的尖端也是已知的,这是法线上唯一已知的点。在

下面给出了python函数的代码。这段代码画一条线,穿过尖端,但不一定垂直于蓝线。在

def draw_intercepts(img,triangle):
    tip=triangle["tip"]
    x1=tip[0]
    y1=tip[1]
    arrow_angle=triangle["arrow_angle"]
    y_intercept=int(y1+((1/np.tan(arrow_angle))*x1))
    x_intercept=int(x1+(np.tan(arrow_angle)*y1))
    cv2.line(img,(x_intercept,0),(0,y_intercept),[0,0,255],3,cv2.LINE_AA)

以下是本文的答案: https://math.stackexchange.com/questions/2381119/how-to-find-slope-x-and-y-intercepts-given-angle-to-the-normal-vector-and-a-poi

注: 我按照建议更新了代码:

^{pr2}$

这就解决了这个问题。 现在,当箭头角度位于第1或第3象限(如0<;arrow_angle<;90和180<;arrow_angle<;270,但在第2和第4象限(90<;arrow_changle<;180和270<;arrow_changle<;360)中,线角度绘制的角度或位置不正确。甚至我也不知道这条线是在某处画的,因为它在图像中是看不见的。在


Tags: 代码图像lt箭头角度x1triangle三角形
1条回答
网友
1楼 · 发布于 2024-06-15 05:58:56

请注意,使用的直线方程“在截距段”不是通用的-不适用于水平线和垂直线。对于截距进近,必须分别处理0、Pi/2、Pi、3*Pi/2或-Pi/2。在

如果arrow_angle代表蓝线:

c = -Sin(arrow_angle)
s = Cos(arrow_angle)

如果arrow_angle表示红线:

^{pr2}$

然后通过点画线

 (x1 - c * 4096, y1  - s * 4096) and (x1 + c * 4096, y1  + s * 4096)

(我使用了与屏幕大小相当的任意大常量)

相关问题 更多 >