图形算法,看似没什么用,其实如果能把这些基础的算法都烂熟于胸,举一反三,在开发游戏或高级应用时,可以让你受到极大启发。
一、根据三个顶点画出三角形
package com.king{ import flash.display.Sprite; import flash.geom.Point public class testTriangle extends Sprite{ public function testTriangle(){ //已知条件 var pointA:Point=new Point(0,0); var pointB:Point=new Point(50,55); var pointC:Point=new Point(0,70); //画三角形 graphics.lineStyle(1, 0xff0000, 1); graphics.moveTo(pointA.x,pointA.y); graphics.lineTo(pointB.x,pointB.y); graphics.lineTo(pointC.x,pointC.y); graphics.lineTo(pointA.x,pointA.y); } }
二、画等腰三角形
1、等腰三角形可以看做其两腰交叉的那个点在一个圆的圆心,那么其他两个顶点则在这个圆上,假设圆心坐标为(0,0),圆的半径为r,两腰夹角为Q,可得另个顶点坐标为(r,0),最后个顶点坐标为(r*cosQ,r*sinQ
package com.king{ import flash.display.Sprite; import flash.geom.Point public class testTriangle extends Sprite{ public function testTriangle(){ //已知条件 var r:Number=100; var Q:Number=30*(2*Math.PI/360);//这里得到是弧度,即30度对应的弧度数 //画三角形 graphics.lineStyle(1, 0xff0000, 1); graphics.moveTo(0,0); graphics.lineTo(r,0); graphics.lineTo(r*Math.cos(Q),r*Math.sin(Q)); graphics.lineTo(0,0); } }
2、等边三角形可看做两腰夹角为60度的等腰三角形,只需知道边长,即可按照上面的方法画出
3、如果已知条件为 两腰夹角Q,底边长度d,那么两腰的长度即圆的半径r 为d*Math.PI/(2*Q),再按照上面的方法也可画出
4、如果知道等腰三角形的腰长r 和底边长d 也可求出
假设两腰夹角为x ,沿顶点画出等腰三角形的垂直平分线,可看出sin(x/2)=(d/2)/r,可求出夹角Q=(Math.asin((d/2)/r))/2,再按照上面的方法也可画出
三、画普通的三角形
1、已知两角一边
package com.king{ /* author: ShangBin Feng QQ: 334973991 */ import flash.display.Sprite; import flash.geom.Point; public class testTriangle extends Sprite{ public function testTriangle(){ //已知条件 var a:Number=100; var A:Number=90*2*Math.PI/360; var B:Number=30*2*Math.PI/360; //画三角形 var b:Number=a*Math.sin(A)/Math.tan(B)+a*Math.cos(A); graphics.lineStyle(1, 0xff0000, 1); graphics.moveTo(0,0); graphics.lineTo(a,0); graphics.lineTo(b*Math.cos(A),b*Math.sin(A)); graphics.lineTo(0,0); } } } 2、已知两边和此两边的夹角 package com.king{ import flash.display.Sprite; import flash.geom.Point; public class testTriangle extends Sprite{ public function testTriangle(){ //已知条件 var a:Number=100; var b:Number=200; var A:Number=90*2*Math.PI/360; //画三角形 graphics.lineStyle(1, 0xff0000, 1); graphics.moveTo(0,0); graphics.lineTo(a,0); graphics.lineTo(b*Math.cos(A),b*Math.sin(A)); graphics.lineTo(0,0); } } } 3、已知三条边长,最大边和最小边之差不能大于第三边 package com.king{ import flash.display.Sprite; import flash.geom.Point; public class testTriangle extends Sprite{ public function testTriangle(){ //已知条件 var a:Number=100; var b:Number=200; var c:Number=250; //画三角形 var x=(a*a+b*b-c*c)/(2*a); var y=Math.sqrt(b*b-x*x); graphics.lineStyle(1, 0xff0000, 1); graphics.moveTo(0,0); graphics.lineTo(a,0); graphics.lineTo(x,y); graphics.lineTo(0,0); } } }