Is there a nice way to draw an arrowhead, when you have only coordinates of the source and destination point of the line?
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
答案 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/6
与Cos(Pi/6) = Sqrt(3)/2
和Sin(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。