圈子小程序:如何加入重叠的圈子 (join circles)

我想在视觉上连接两个重叠的圆圈,以便

AltText

变成

alt text

我已经有了部分圆的方法,但现在我需要知道搜索圆的重叠角度有多大,我不知道该怎么做。

有人有主意吗?

36

Phi= ArcTan[ Sqrt[4 * R^2 - d^2] /d ]

HTH!

Edit

对于两个不同的半径:

简化一点:

Phi= ArcTan[Sqrt[-d^4 -(R1^2 - R2^2)^2 + 2*d^2*(R1^2 + R2^2)]/(d^2 +R1^2 -R2^2)]
Edit

如果要从另一个圆心查看角度,只需在最后一个方程式中将 R1 与 R2 交换即可。

是 Mathematica 中的示例实现:

f[center1_, d_, R1_, R2_] := Module[{Phi, Theta},
   Phi=  ArcTan[Sqrt[-d^4-(R1^2-R2^2)^2 + 2*d^2*(R1^2 + R2^2)]/(d^2 +R1^2 -R2^2)]
   Theta=ArcTan[Sqrt[-d^4-(R1^2-R2^2)^2 + 2*d^2*(R1^2 + R2^2)]/(d^2 -R1^2 +R2^2)]
   {Circle[{center1, 0}, R1, {2 Pi - Phi,   Phi}], 
    Circle[{d,       0}, R2, {Pi - Theta,  -Pi + Theta}]}
   ];
Graphics[f[0, 1.5, 1, 1]]

alt text

Graphics[f[0, 1.5, 1, 3/4]]  

alt text

还有...

ImageMultiply[
 Binarize@FillingTransform[#], 
 ImageResize[Import@
 "http://i305.photobucket.com/als/nn235/greeneyedgirlox/blondebabybunny.jpg", 
   ImageDimensions@#]] &@
 Rasterize@Graphics[f[0, 1.5, 1, 1], Background -> Black]

alt text

:)

8

现在,这将为您工作 100 %,即使图是椭圆任意数量的数字

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Pen p = new Pen(Color.Red, 2);      
        Rectangle Fig1 = new Rectangle(50, 50, 100, 50);  //dimensions of Fig1
        Rectangle Fig2 = new Rectangle(100, 50, 100, 50); //dimensions of Fig2
        . . .
        DrawFigure(e.Graphics, p, Fig1);   
        DrawFigure(e.Graphics, p, Fig2);
        . . .
        //remember to call  FillFigure after  drawing all figures.
        FillFigure(e.Graphics, p, Fig1); 
        FillFigure(e.Graphics, p, Fig2);
        . . .
    }
    private void DrawFigure(Graphics g, Pen p, Rectangle r)
    {
        g.DrawEllipse(p, r.X, r.Y, r.Width, r.Height);
    }
    private void FillFigure(Graphics g, Pen p, Rectangle r)
    {
        g.FillEllipse(new SolidBrush(this.BackColor), r.X + p.Width, r.Y + p.Width, r.Width - 2 * +p.Width, r.Height - 2 * +p.Width);      //Adjusting Color so that it will leave border and fill 
    }

alt text

5

现在没有时间解决它。但是我会给你你需要解决的问题:

http://en..org/wiki/Triangle#The_sine.2C_cosine_and_tangent_rules

在 Wikipedia 上的图片中,您会看到三角形 A,B,C。设 A 为左圆的中心,B 为右圆的中心。AC 为左圆的半径,BC 为右圆的半径。

alt text

那么 C 点就是最上面的交点。A 中的角,α,是左圆的一半。B 中的角,β,右圆的一半。这些是你需要的角度,对吗?

进一步解释说:“如果已知任何三角形的所有三个边的长度,则可以计算出三个角度。”

伪代码:

a=radius_a
b=radius_b
c=b_x - a_x
alpha=arccos((b^2 + c^2 - a^2) / (2*b*c)) //from 
left_angle=2*alpha

祝你好运:)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(760)
单片机软件调试:单片机和蓝牙的电路编程(bluetooth microcontroller)
上一篇
Processing互动代码:解开-Coldwood互动
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(23条)