如何用两个(或三个)给定角度绘制一个三角形,一个边(一条线)在动作中的每个角上写下角度?

时间:2013-02-23 11:55:37

标签: actionscript-3 actionscript geometry actionscript-2

我想使用两个角度和一个边长(或只是一条直线)绘制一个三角形。任何人都可以给我一个ActionScript代码。每个角都应该有角的角度。提前致谢

抱歉,我无法上传任何图片..

想象一个名为ABC的普通三角形。 我想通过给出AB的长度和A,B的角度来绘制三角形。例如,如果我给角“a = 45度”和“b = 45度”(那么其他角度将是90度)和“AB = 20像素“然后应绘制三角形。

1 个答案:

答案 0 :(得分:0)

有趣的数学:)

Sprite类具有graphics属性,可让您使用Flash Graphics API进行绘制。要做基本的线条图,请考虑笔尖。您可以将笔尖移动到x,y坐标,并将线条绘制到其他坐标。当你这样做时,笔的尖端现在位于新坐标处。在Flash中,坐标平面的原点(0,0)位于顶部/左侧。

我通过使用moveTo()方法设置起始坐标来绘制三角形。然后计算将从起始坐标绘制的两条线的终点。最后,使用lineTo()方法绘制线段。

package
{
    import flash.display.Graphics;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;

    public class DrawTriangle extends Sprite
    {
        private var startX:Number = 200;
        private var startY:Number = 200;

        private var angleA:Number = 10;
        private var angleB:Number = 90;
        private var lengthOfSideC:Number = 200;

        public function DrawTriangle()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            var angleAInRadians:Number = angleInRaidans(angleA);
            var angleBInRadians:Number = angleInRaidans(angleB);
            var angleCInRadians:Number = angleInRaidans(180 - angleA - angleB);
            var lengthOfSideA:Number = Math.sin(angleAInRadians) * lengthOfSideC / Math.sin(angleCInRadians);
            var lengthOfSideB:Number = Math.sin(angleBInRadians) * lengthOfSideC / Math.sin(angleCInRadians);

            var g:Graphics = this.graphics;
            g.clear();
            g.lineStyle(1.5, 0xFF0000, 1, true);
            g.moveTo(startX, startY);

            var bSideEndX:Number = (lengthOfSideB * Math.cos(angleBInRadians))+ startX;
            var bSideEndY:Number = (lengthOfSideB * Math.sin(angleBInRadians))+ startY;
            g.lineTo(bSideEndX, bSideEndY);

            g.lineStyle(1.5, 0x0000FF);
            var cSideEndX:Number = -(lengthOfSideC * Math.cos(angleCInRadians)) + startX;
            var cSideEndY:Number = (lengthOfSideC * Math.sin(angleCInRadians)) + startY;
            g.lineTo(cSideEndX, cSideEndY);

            g.lineStyle(1.5, 0);
            g.lineTo(startX, startY);
        }

        private function angleInRaidans(degrees:Number):Number
        {
            return degrees * Math.PI / 180;
        }
    }
}