c# - 如何加入重叠的圈子?

标签 c# math opengl geometry opentk

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

AltText

成为

alt text

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

有人有想法吗?

最佳答案

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]]

alt text

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

alt text

还有……

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]

alt text

:)

关于c# - 如何加入重叠的圈子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4463933/

相关文章:

c++ - opengl/glut 中的 renderDisplayFunc 不止一次调用 myfunc

c - 作业——二维空间中3点的叉积

algorithm - 如何使用生成 [0.0, 1.0) 之间的 float 的随机生成器生成 [1, n] 之间的随机数

C#:为方法嵌套返回 'this'?

c# - 使用 mida 保护时反序列化失败

python - 数组的所有排列,其中数组中的每个元素必须按0到n之间的范围递增

opengl - 估计 GLSL 着色器所需的寄存器数量

opengl - SDL2/SFML2 中的软件和硬件渲染

c# - 这个特定项目可以使用哪个库/框架?

c# - 字符串[]管理