如何加入重叠的圈子?

我想在视觉上加入两个重叠的圆圈

AltText

替代文字

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

有人有想法吗?

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

HTH!

编辑

对于两个不同的半径:

简化一点:

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

编辑

如果您想要从另一个圆心看到的角度,只需在最后一个等式中用R1交换R1。

以下是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]] 

替代文字

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

替代文字

和…

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

替代文字

🙂

现在这将为你工作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, rX, rY, r.Width, r.Height); } private void FillFigure(Graphics g, Pen p, Rectangle r) { g.FillEllipse(new SolidBrush(this.BackColor), rX + p.Width, rY + p.Width, r.Width - 2 * +p.Width, r.Height - 2 * +p.Width); //Adjusting Color so that it will leave border and fill } 

替代文字

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

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

在维基百科上的图片中,您可以看到三角形A,B,C。 设A为左圆的中心,B为右圆的中心。 AC是左圆的半径,BC是右圆的半径。

替代文字

然后,点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 wikipedia left_angle=2*alpha 

祝好运 :)