How to draw arrow head with coordinates?

时间:2017-11-02 15:41:27

标签: c# math geometry itext coordinates

Is there a nice way to draw an arrowhead, when you have only coordinates of the source and destination point of the line?

Image for reference

So I'm using ITextSharp, programming in c#. I know how to easily calculate slope and stuff but is there a way of calculating the edge coordinates for the "arrowhead" triangle (marked red in image)?

Thanks in advance

2 个答案:

答案 0 :(得分:2)

您的中心线是从(x1,y1)(x2,y2)

的矢量

向后方向向量D = (dx, dy) = (x1-x2, y1-y2)

长度:Norm = Sqrt(dx * dx + dy * dy)

将其标准化:uD = (udx, udy) = (dx/Norm, dy/Norm)

形成"翅膀"箭头,按所需角度旋转uD。例如,我将角度Pi/6Cos(Pi/6) = Sqrt(3)/2Sin(Pi/6) = 1/2

一起使用
ax = udx * Sqrt(3)/2 - udy * 1/2
ay = udx * 1/2 + udy * Sqrt(3)/2
bx = udx * Sqrt(3)/2 + udy * 1/2
by =  - udx * 1/2 + udy * Sqrt(3)/2

长度为L=20的头部点数:

 (x1 + 20 * ax, y1 + 20 * ay) 
and
 (x1 + 20 * bx, y1 + 20 * by)

答案 1 :(得分:0)

如果我们为你的线的终点和箭头的一边的终点分别定义两个(2维)向量p2和p3,你将通过评估得到p3

p3 = p2 + A(alpha)s

s是向量(l,0),其中l是箭头一侧的长度。

alpha是此线相对于x轴的角度,即给定线的角度与此线与箭头线之间的正角度或负角度的总和。

矩阵的组成部分是:

a11 = a22 = cos(alpha)

a12 = -sin(alpha)

a21 = sin(alpha)

编辑:由于s的y分量为零,因此不需要a12和a22。