AS3:数学相关 - 构造等边三角形

时间:2010-01-06 22:39:56

标签: flex actionscript-3 math

我正在尝试使用以下代码构建一个等边三角形,但我没有看到我期望的结果。
我希望看到一个三角形画到舞台上,但我没有看到一个。 我认为在屏幕上三精灵的位置一定有问题。

public class test_drawing_triangle extends Sprite
{
    public function test_drawing_triangle()
    {
        var tri:Sprite = new Sprite;    
        var nextx:int;
        var nexty:int;
        var prevx:int;
        var prevy:int;
        var angle:Number;
        var radius:Number;
        var deg:int;
        var i:int;

        radius = 10;
       // tri.x = stage.stageWidth / 2;
        tri.y = 50;

        tri.graphics.clear();
        tri.graphics.beginFill(0x000000, 0.5);
        tri.graphics.moveTo(0,0);

        for(deg = 0; deg < 360; deg += 120)
        {
            angle = deg * Math.PI / 180;
            nextx = Math.cos(angle) * radius;
            nexty = Math.sin(angle) * radius;
            tri.graphics.lineTo(nextx, nexty);
        }
        tri.graphics.endFill();
        addChild(tri);
    }
}

更新:

我现在可以看到三角形,但没有填写。 它似乎具有通常正确的形状,但我希望它是3面而不是4面。 如果任何人都可以花一点时间来编译它并查看我所描述的内容,那将会非常有帮助。

3 个答案:

答案 0 :(得分:1)

我不确定我是否理解你要做的事情,但是如果你想让圆圈位于三角形的角落。比你需要改变

  

tri.graphics.drawCircle(0,0,2);

  

tri.graphics.drawCircle(nextx,nexty,2);

drawCircle采用绝对x,y而不关心moveTo

编辑 - 使用此代码代替循环

deg = 30;
angle = (deg * Math.PI) / 180.0;
nextx = Math.cos(angle) * radius;
nexty = Math.sin(angle) * radius;
(tri.graphics as Graphics).moveTo(nextx, nexty);
for(deg = 150; deg < 420; deg += 120)
{
 angle = (deg * Math.PI) / 180.0;
 nextx = Math.cos(angle) * radius;
 nexty = Math.sin(angle) * radius;   
 (tri.graphics as Graphics).lineTo(nextx, nexty);     
} 

答案 1 :(得分:0)

此代码看起来像是在三角形的点上绘制三个圆圈。如果是这种情况,那么替换

tri.graphics.moveTo(nextx, nexty);  
tri.graphics.drawCircle(0, 0, 2);

tri.graphics.lineTo(nextx, nexty);

如果情况并非如此,请说明您所看到的内容,以便我们更好地了解出现了什么问题。

答案 2 :(得分:0)

您是否有特殊原因使用角度来绘制三角形?

如果我这样做,我只需硬编码一个单位大小的等边三角形(定义为三个3d点),然后使用缩放和平移操作将其放入正确的大小和位置。