Vector 获取直线点箭头的坐标

Vector 获取直线点箭头的坐标,vector,Vector,我想我有两点 QPoint(100100) QPoint(200200) 现在,我需要在QPoint(200200)行的末尾画一个箭头 既然直线是倾斜的,我怎样才能得到箭头坐标的点呢?箭头应如下所示 由于这是一个更一般的问题,我在pyqt5和css上添加了标签。如果我们看一下我们需要的点(U和D需要,S和E给出): 我们实际上必须从S回到E,然后我们转90度,走相同的长度。如果我们选择S和E之间的方向(表示为向量): 然后我们可以计算出返回的距离: b = -d / 4 然后以90度角向上走

我想我有两点

QPoint(100100) QPoint(200200)

现在,我需要在QPoint(200200)行的末尾画一个箭头

既然直线是倾斜的,我怎样才能得到箭头坐标的点呢?箭头应如下所示


由于这是一个更一般的问题,我在pyqt5和css上添加了标签。

如果我们看一下我们需要的点(U和D需要,S和E给出):

我们实际上必须从S回到E,然后我们转90度,走相同的长度。如果我们选择S和E之间的方向(表示为向量):

然后我们可以计算出返回的距离:

b = -d / 4
然后以90度角向上走,我们交换x和y,向下走,我们只取负的一个:

u = [b.y, b.x]
d = -u
因此,我们最终可以得出以下结论:

U = S + b + u
D = S + b + d

(上面的代码是伪代码,因为您需要一个通用的解决方案)

您需要计算直线的坡度,这将使您能够在直线上找到距离端点给定距离的点。然后可以创建一条与穿过该点的原始直线垂直的新线。箭头的末端应位于该线上,与原始线保持一定距离。展示比解释更容易:

函数绘图(点1、点2、距离、长度){
//斜率为dx/dy
设dx=point2[0]-point1[0]
设dy=point2[1]-point1[1]
设v_norm=Math.sqrt(dx**2+dy**2)
//点在远处的线上
设_线上的点_=[点2[0]-距离*dx/v_范数,点2[1]-距离*dy/v_范数]
//点上方长度箭头的端点(与原始直线的距离
设下面的点=[线[0]上的点]-长度*-dy/v\u范数,线[1]上的点]-长度*dx/v\u范数,]
设上面的点=[线[0]上的点+length*-dy/v\u范数,线[1]上的点+length*dx/v\u范数,]
var canvas=document.getElementById('canvas');
var ctx=canvas.getContext('2d');
ctx.beginPath();
ctx.移动到(…点1);
ctx.lineTo(…点2);
ctx.移动到(…上面的点)
ctx.lineTo(…点2)
ctx.lineTo(…下面的点)
ctx.stroke();
}
绘制([100100]、[200150]、20、10)
绘制([100100]、[300150]、20、10)
画([100100],[15010],[2010])
绘制([100100]、[90150]、20、10)
抽签([100100],[200100],20,10)
绘制([100100]、[5,10]、20,10)

三角法。确定线段相对于端点的角度(在本例中为225)。然后选择每个“箭头翼”的角度每个圆的长度,例如30度和20度。225+/-30=195255。在200200处找到圆的端点,半径为20,角度为195255。谢谢。如果直线不在90度会发生什么。是否有任何python包可以为我自动计算它。我无法回答,因为询问库有点困难离题,我不懂python:)但是你可以很容易地缩小
u
d
来实现这一点。感谢你的评论,这非常有用,我发布了一个类似的问题-为什么箭头总是有突出的东西而不是尖锐的箭头?非常感谢你提出这个问题。我一直在寻找解决问题的方法,现在我才知道该怎么做。再次感谢你,伙计!
u = [b.y, b.x]
d = -u
U = S + b + u
D = S + b + d