cro*_*lee 8 math flash geometry actionscript-3
这应该是一个简单的几何形状:如何计算在下面的代码中绘制线条的点,以便它形成2D锥形或楔形?
import flash.geom.Point;
//draw circle
var mc=new Sprite()
mc.graphics.lineStyle(0,0)
mc.graphics.drawCircle(0,0,30)
mc.x=mc.y=Math.random()*300+100
addChild(mc)
//draw lines:
graphics.lineStyle(0,0)
var p=new Point(Math.random()*500,Math.random()*400)
graphics.moveTo(p.x, p.y)
graphics.lineTo(mc.x,mc.y) // << should be point on edge of circle
graphics.moveTo(p.x, p.y)
graphics.lineTo(mc.x,mc.y) // << should be point on opposite edge of circle
Run Code Online (Sandbox Code Playgroud)
更新:
谢谢大家,我应该提到我的目标不是绘制楔形,而是从随机点到现有圆的边缘画一条线.
如果你对代数比动作更舒服,也许你可以看看这个图形并为我发布一个公式?

您的问题是关于泰勒斯定理(请参阅http://en.wikipedia.org/wiki/Thales%27_theorem)。
以下是稍加修改以适用于 AS3 的定理。
导入 flash.geom.Point;
// The radius of the circle
var r1:Number = 30;
// The center point of the circle
var cp:Number = Math.random() * 300+100;
var c:Point = new Point(cp, cp);
// draw circle
var mc=new Sprite();
mc.graphics.lineStyle(0,0);
mc.graphics.drawCircle(0,0,r1);
mc.x = mc.y = cp;
addChild(mc);
// The point
var p = new Point(Math.random() * 500, Math.random() * 400);
// Calculate points for intesecting circle
var c2:Point = Point.interpolate(c, p, 0.5);
var r2:Number = Point.distance(c2, c);
var d:Number = Point.distance(c, c2);
// Remove comment below to see intersecting circle
//graphics.beginFill(0xFF0000, 0.25);
//graphics.drawCircle(c2.x, c2.y, r2);
var a:Number = (r1*r1 - r2*r2 + d*d) / (2*d);
var p2x:Number = c.x + a * ( c2.x - c.x ) / d;
var p2y:Number = c.y + a * ( c2.y - c.y ) / d;
var h:Number = Math.sqrt(r1*r1 - a*a);
var d1x:Number = p2x + h * ( c2.y - c.y ) / d;
var d1y:Number = p2y - h * ( c2.x - c.x ) / d;
var d2x:Number = p2x - h * ( c2.y - c.y ) / d;
var d2y:Number = p2y + h * ( c2.x - c.x ) / d;
// Draw lines
graphics.lineStyle(1, 0xFF00FF, 0.5);
graphics.moveTo(p.x, p.y);
graphics.lineTo(d1x, d1y);
graphics.moveTo(p.x, p.y);
graphics.lineTo(d2x, d2y);
Run Code Online (Sandbox Code Playgroud)
最终产品:

绘制第二个圆(您实际上不需要绘制第二个圆,您只需要它的中心点和半径)

查看以下 SWF 以查看实际效果(刷新以查看不同的随机圆圈):
http://megaswf.com/serve/1097652