我希望能够视觉上连接两个重叠的圆形,以便
变成
我已经有了部分圆的方法,但现在我需要知道每个圆的重叠角度有多大,而我不知道如何做到这一点。
有人有想法吗?
Phi= ArcTan[ Sqrt[4 * R^2 - d^2] /d ]
祝一切顺利!
编辑
对于两个不同的半径:
稍微简化一下:
Phi= ArcTan[Sqrt[-d^4 -(R1^2 - R2^2)^2 + 2*d^2*(R1^2 + R2^2)]/(d^2 +R1^2 -R2^2)]
编辑
如果你想要从另一个圆心观察的角度,只需在最后一个方程中将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]]
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]
:)
Geometry Expressions
完成的,后三个是使用 Mathematica
完成的。代码也是 Mathematica 代码。 - Dr. belisarius 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
}
暂时没时间解决,但我会给你需要的东西来解决它:
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
祝你好运 :)
Region
类中表示它们吗?为边缘定义一个Path
?还是在Bitmap
上绘制它们?就我而言,我不知道“joining circles”在C#方面意味着什么。除了“math”标签外,所有标签都代表什么意思? - Ran