作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有什么是舞台上的两个圆圈,circ1 和 circ2。 circ1 的半径为 60,circ2 的半径为 30。
circ2 可以在播放时在舞台周围拖动。
我想要什么是通过公共(public)外切线连接圆的两条线。这是为了把一张旧海报变成一个互动的乐趣盒。这是 link to the poster ,它可能会帮助您理解我的意思(尽管现在我只担心两个圈子自己)。
问题:我知道如何用笔和纸找到共同的切线,但是当我试图设想如何将其表达为 Flash 可能理解的术语时,我的大脑就崩溃了。我不知道如何使用 ActionScript 来实现这一点。
我尝试过的:我环顾四周,this is the closest thing I can find到我想要实现的目标(示例应用程序可在页面底部下载)。唯一的区别是这包括内部切线,我不需要。
不幸的是,这个源代码是用 Java 编写的,尽管我尽了最大的努力,但我对它的理解还不够,无法移植到 AS3。
到目前为止,我自己设法实现的只是为每个圆的中心定义点,然后意识到我无法为变量制作快速求解方程。然后我花了几个小时在谷歌上搜索,试图弄清楚如何从这里开始。
任何帮助将不胜感激,这是本周末到期的学校项目的工作。我可能已经咬得比我能咀嚼的多,但现在回头已经太迟了。
提前致谢!
最佳答案
function DrawTangents(p1 : Point, r1 : Number, p2 : Point, r2 : Number) : void {
var dx = p2.x - p1.x;
var dy = p2.y - p1.y;
var dist = Math.sqrt(dx*dx + dy*dy);
this.graphics.drawCircle(p1.x, p1.y, r1);
this.graphics.drawCircle(p2.x, p2.y, r2);
if (dist <= Math.abs(r2 - r1)) {
// The circles are coinciding. There are no valid tangents.
return;
}
// Rotation from the x-axis.
var angle1 = Math.atan2(dy, dx);
// Relative angle of the normals. This is equal for both circles.
var angle2 = Math.acos((r1 - r2)/dist);
this.graphics.moveTo(p1.x + r1 * Math.cos(angle1 + angle2),
p1.y + r1 * Math.sin(angle1 + angle2));
this.graphics.lineTo(p2.x + r2 * Math.cos(angle1 + angle2),
p2.y + r2 * Math.sin(angle1 + angle2));
this.graphics.moveTo(p1.x + r1 * Math.cos(angle1 - angle2),
p1.y + r1 * Math.sin(angle1 - angle2));
this.graphics.lineTo(p2.x + r2 * Math.cos(angle1 - angle2),
p2.y + r2 * Math.sin(angle1 - angle2));
}
关于actionscript-3 - AS3 : Draw a line along the common tangents of two circles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12034019/
我是一名优秀的程序员,十分优秀!