使用线斜率在线的终点绘制箭头

时间:2012-01-09 11:02:36

标签: actionscript-3

我正在开发一个白板应用程序,允许用户使用箭头绘制线条(有些像带有箭头功能的Microsoft Word行)。我使用graphics属性和lineTo()方法绘制一条线。现在我必须在最后一点画一个有角度的箭头。我通过连接最后几点周围的点来绘制箭头。由于360线可以通过这一点,每条线可以有不同的箭头角度。请建议我在最后一点计算这些点的方法。

2 个答案:

答案 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

相关问题