三角形と円 178ep3 forked:1favorite:6lines:185license : MIT License modified : 2009-10-02 16:37:19 Embed Tweet package { import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; public class InnerCenter extends Sprite { public function InnerCenter() { var y1_1:Point = new Point(0,465); var y1_2:Point = new Point(0,0); var y2_1:Point = new Point(0,465); var y2_2:Point = new Point(0,0); var line1:Shape = addChild(new Shape())as Shape; line1.y = 233; drawHLine(line1,0x00); var line2:Shape = addChild(new Shape())as Shape; line2.y = 150; drawHLine(line2,0xff0000); var pointOnLine1_1:Shape = addChild(new Shape())as Shape; pointOnLine1_1.x = 180; pointOnLine1_1.y = 233; drawPoint(pointOnLine1_1); var p1_1:Point = new Point(180,233); var pointOnLine1_2:Shape = addChild(new Shape())as Shape; pointOnLine1_2.x = 286; pointOnLine1_2.y = 233; drawPoint(pointOnLine1_2); var p1_2:Point = new Point(286,233); var pointOnLine2:Shape = addChild(new Shape())as Shape; pointOnLine2.y = 150; drawPoint(pointOnLine2); var p2:Point = new Point(0,150); var line1_1_2:Shape = addChild(new Shape())as Shape; var line1_2_2:Shape = addChild(new Shape())as Shape; var circle1:Shape = addChild(new Shape())as Shape; var c1p:Point = new Point(233,300); circle1.x = c1p.x; circle1.y = c1p.y; var pointC1:Shape = addChild(new Shape())as Shape; pointC1.x = c1p.x; pointC1.y = c1p.y; drawPoint(pointC1); var Dpoint:Shape = addChild(new Shape())as Shape; var oP1:Point = pointD(p2,p1_1,p1_2); Dpoint.x = oP1.x; Dpoint.y = oP1.y; drawPoint(Dpoint); var oc1:Shape = addChild(new Shape())as Shape; var Dpoint2:Shape = addChild(new Shape())as Shape; var oP2:Point = pointD(p2,p1_1,p1_2); Dpoint2.x = oP2.x; Dpoint2.y = oP2.y; drawPoint(Dpoint2); var oc2:Shape = addChild(new Shape())as Shape; var Dpoint3:Shape = addChild(new Shape())as Shape; var oP3:Point = pointD(p2,p1_1,p1_2); Dpoint3.x = oP3.x; Dpoint3.y = oP3.y; drawPoint(Dpoint3); var oc3:Shape = addChild(new Shape())as Shape; var sp:Number = 7; addEventListener(Event.ENTER_FRAME,loop); function loop(e:Event):void { sp = Math.pow(pointOnLine2.x -233,2)/10000+7; pointOnLine2.x += sp; if(pointOnLine2.x > 4233)pointOnLine2.x = -4767; p2.x = pointOnLine2.x; p2.y = pointOnLine2.y; y1_1.x = lineFormula(p1_1,p2,y1_1.y).x; y1_2.x = lineFormula(p1_1,p2,y1_2.y).x; drawLine(line1_1_2,y1_1,y1_2); y2_1.x = lineFormula(p1_2,p2,y2_1.y).x; y2_2.x = lineFormula(p1_2,p2,y2_2.y).x; drawLine(line1_2_2,y2_1,y2_2); c1p = innerPoint(p1_1,p1_2,p2); circle1.x = c1p.x; circle1.y = c1p.y; pointC1.x = c1p.x; pointC1.y = c1p.y; var o:Object = lineFormula(y1_1,y1_2,y1_1.y); drawcircle(circle1,distFormula(o,c1p)); oP1 = innerPoint(p2,p1_1,p1_2,-1); Dpoint.x = oP1.x; Dpoint.y = oP1.y; var oo:Object = lineFormula(p1_1,p2,y1_1.y); drawcircle(oc1,distFormula(oo,oP1)); oc1.x = oP1.x; oc1.y = oP1.y; oP2 = innerPoint(p2,p1_1,p1_2,1,-1); Dpoint2.x = oP2.x; Dpoint2.y = oP2.y; var oo2:Object = lineFormula(p1_2,p2,y2_1.y); drawcircle(oc2,distFormula(oo2,oP2)); oc2.x = oP2.x; oc2.y = oP2.y; oP3 = innerPoint(p2,p1_1,p1_2,1,1,-1); Dpoint3.x = oP3.x; Dpoint3.y = oP3.y; var oo3:Object = lineFormula(p1_1,p2,y1_1.y); drawcircle(oc3,distFormula(oo3,oP3)); oc3.x = oP3.x; oc3.y = oP3.y; } } private function innerPoint(p1:Point,p2:Point,p3:Point,m1:int=1,m2:int=1,m3:int=1):Point { var p:Point = new Point(0,0); var a:Number = Point.distance(p2,p3)*m1; var b:Number = Point.distance(p1,p3)*m2; var c:Number = Point.distance(p1,p2)*m3; p.x = (p1.x*a+p2.x*b+p3.x*c)/(a+b+c); p.y = (p1.y*a+p2.y*b+p3.y*c)/(a+b+c); return p; } private function lineFormula(p1:Point,p2:Point,y:Number):Object { var a:Number = (p2.y - p1.y)/(p2.x-p1.x); var b:Number = (p2.x*p1.y - p1.x*p2.y)/(p2.x-p1.x); var x:Number = (y - b)/a; var obj:Object = {a:a,b:b,x:x,y:y}; return obj; } private function distFormula(o:Object,p:Point):Number { var d:Number = Math.abs(o.a*p.x - p.y + o.b) / Math.sqrt(o.a*o.a+1); return d; } private function pointD(p1:Point,p2:Point,p3:Point):Point { var a:Number = Point.distance(p1,p2); var b:Number = Point.distance(p1,p3); var c:Number = Point.distance(p2,p3); var q:Number = a/b; if(p1.x>233)q = 1-(b/a); var p:Point = Point.interpolate(p2,p3,q); return p; } private function drawLine(target:Shape,mp:Point,lp:Point):void { with(target.graphics) { clear(); lineStyle(1,0x00); moveTo(mp.x,mp.y); lineTo(lp.x,lp.y); endFill(); } } private function drawHLine(target:Shape,color:uint):void { with(target.graphics) { lineStyle(1,color); moveTo(0,0); lineTo(465,0); endFill(); } } private function drawcircle(target:Shape,r:Number):void { if(isNaN(r))r=0; with(target.graphics) { clear(); beginFill(0xff,0.5); drawCircle(0,0,r); endFill(); } } private function drawPoint(target:Shape):void { with(target.graphics) { clear(); lineStyle(1,0x00); beginFill(0xff0000); drawCircle(0,0,3); endFill(); } } } } Code Fullscreen Preview Fullscreen bradsedito tkinjo nyamogera nki2 9re : 傍心・内心 deerares : geometry geometry Point.distance Point addChild graphics target Object Point.interpolate isNaN Math.pow Math.abs Math.sqrt addEventListener Event.ENTER_FRAME Event uint Sprite int Number sort new page view favorite forked pv228 forked from: 三角形と円 deerares forked:0 favorite:0lines:185 (diff:7)