我在.NET中开发了一个绘制一些行的应用程序。 在一条线的中间,我需要绘制线方向数组。
有:
(xA, yA, xB, yB)
或(pA, pB)
- 段AB
点
arrWidth, arrHeight
- 箭头尺寸;
> B
- 箭头方向。
需要:
3个新点pArr1, pArr2, pArr3
- 方向箭头的点,应位于段AB
的中间。
答案 0 :(得分:2)
首先我会做一些定义。
令:
然后你的三点是:
其中v / | v |是沿着你的线的单位向量。
在2维中,L只是映射(x,y)=> (-y,x)
更明确地说,使用问题中的变量,上面的几点可以用C#编写为:
// assuming xA, yA, xB, yB, arrWidth, arrHeight are initialised
var xV = xB - xA;
var yV = yB - yA;
var v = Math.Sqrt(xV*xV + yV*yV);
var pArr1 = new[] {
xA + xV / 2 - xV * arrHeight / (2 * v) - yV * arrWidth / (2 * v),
yA + yV / 2 - yV * arrHeight / (2 * v) + xV * arrWidth / (2 * v) };
var pArr2 = new[] {
xA + xV / 2 - xV * arrHeight / (2 * v) + yV * arrWidth / (2 * v),
yA + yV / 2 - yV * arrHeight / (2 * v) - xV * arrWidth / (2 * v) };
var pArr3 = new[] {
xA + xV / 2 + xV * arrHeight / (2 * v),
yA + yV / 2 + yV * arrHeight / (2 * v) };