我正在开发一个白板应用程序,允许用户使用箭头绘制线条(有些像带有箭头功能的Microsoft Word行)。我使用graphics属性和lineTo()方法绘制一条线。现在我必须在最后一点画一个有角度的箭头。我通过连接最后几点周围的点来绘制箭头。由于360线可以通过这一点,每条线可以有不同的箭头角度。请建议我在最后一点计算这些点的方法。
答案 0 :(得分:2)
我自己一直在做一些事情,我需要它看起来比一个三角形更好,并且使用相对便宜的计算(尽可能少地调用其他函数,如数学三角函数)。这是:
public static function DrawArrow(ax:int, ay:int, bx:int, by:int):void
{
// a is beginning, b is the arrow tip.
var abx:int, aby:int, ab:int, cx:Number, cy:Number, dx:Number, dy:Number, ex:Number, ey:Number, fx:Number, fy:Number;
var size:Number = 8, ratio:Number = 2, fullness1:Number = 2, fullness2:Number = 3; // these can be adjusted as needed
abx = bx - ax;
aby = by - ay;
ab = Math.sqrt(abx * abx + aby * aby);
cx = bx - size * abx / ab;
cy = by - size * aby / ab;
dx = cx + (by - cy) / ratio;
dy = cy + (cx - bx) / ratio;
ex = cx - (by - cy) / ratio;
ey = cy - (cx - bx) / ratio;
fx = (fullness1 * cx + bx) / fullness2;
fy = (fullness1 * cy + by) / fullness2;
// draw lines and apply fill: a -> b -> d -> f -> e -> b
// replace "sprite" with the name of your sprite
sprite.graphics.clear();
sprite.graphics.beginFill(0xffffff);
sprite.graphics.lineStyle(1, 0xffffff);
sprite.graphics.moveTo(ax, ay);
sprite.graphics.lineTo(bx, by);
sprite.graphics.lineTo(dx, dy);
sprite.graphics.lineTo(fx, fy);
sprite.graphics.lineTo(ex, ey);
sprite.graphics.lineTo(bx, by);
sprite.graphics.endFill();
}
你也可以在参数列表中添加线条颜色和粗细,也许可以使它成为扩展Sprite的成员函数,并且你有一个非常漂亮,多功能的函数:)你也可以用数字来玩一下获得不同的形状和大小(丰满的小变化导致外观疯狂变化,所以小心:))。小心不要将比率或丰满度2设为零!
答案 1 :(得分:0)
如果存储线的起点和终点,添加箭头应该相对简单。如果从起点坐标中减去终点坐标,则会得到箭头方向向量(我们称之为D)。使用此向量,您可以确定两点之间的线上的任何点。
因此,要绘制箭头,您需要确定段上距离终点具有特定距离(d1)的点(P1),确定穿过它的线,并垂直于D最后得到一个点(P2),它与先前确定的点之间的距离(d2)。然后,您可以确定相对于D与P2对称的点。
因此,你的箭头长度为d1,底角为2 * d2。
此处提供了一些其他信息和一些代码示例:http://forums.devx.com/archive/index.php/t-74981.html