仅渲染与主圆相交的圆的线段/区域
我非常喜欢数学(或者像你们大多数人所说的“数学”!),但我还没有达到知道这个问题答案的程度。我有一个主圆,其中心点可以在显示器上的任意 x 和 y 处。其他圆圈将随意在显示屏上移动,但在对渲染方法的任何给定调用中,我不仅要渲染与主圆圈相交的那些圆圈,而且还只渲染在主圆圈内可见的该圆圈的部分。打个比方,阴影投射在现实生活中的物体上,我只想绘制该物体被“照亮”的部分。
我想最好用 Java 来做这件事,但如果你有一个原始公式,我将不胜感激。我想知道如何绘制形状并用 Java 填充它,我确信带有弧线或其他东西的折线一定有一些变化?
非常感谢
I absolutely love maths (or 'math' as most of you would say!) but I haven't done it to a level where I know the answer to this problem. I have a main circle which could have a centre point at any x and y on a display. Other circles will move around the display at will but at any given call to a render method I want to render not only those circles that intersect the main circle, but also only render the segment of that circle that is visible inside the main circle. An analogy would be a shadow cast on a real life object, and I only want to draw the part of that object that is 'illuminated'.
I want to do this preferably in Java, but if you have a raw formula that would be appreciated. I wonder how one might draw the shape and fill it in Java, I'm sure there must be some variation on a polyline with arcs or something?
Many thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
设
A
和B
为 2 个 交集点(没有或有1个拦截点时可以忽略)。然后计算
A
和<之间的圆形线段的长度代码>B。有了这些信息,您应该能够使用
Graphics' drawArc(...)
方法(如果我没记错的话.. .)。编辑
好吧,你甚至不需要圆形线段的长度。我有线相交代码,所以我围绕它构建了一个小型 GUI,如何绘制/查看此类相交圆的 ARC(代码中有一些注释):
如果启动 GUI上面,然后在文本框中输入100 0 130 -80 55 180
并按回车键,您将看到以下内容: ...更改了代码,以便可以通过以下方式绘制圆圈按住并拖动鼠标。屏幕截图:
Let
A
andB
be the 2 intersection points (you can ignore it when there is no, or 1 intercetion point).Then calculate the length of the circular line segment between
A
andB
.With this information, you should be able to draw the arc using
Graphics' drawArc(...)
method (if I'm not mistaken...).EDIT
Well, you don't even need the length of the circular line segment. I had the line-intersection code laying around, so I built a small GUI around it how you could paint/view the ARC of such intersecting circles (there are a bit of comments in the code):
If you start the GUI above and then type100 0 130 -80 55 180
in the text box and hit return, you'll see the following: ...Changed the code so that circles can be drawn by pressing- and dragging the mouse. Screenshot:
假设您知道两个圆的圆心和半径:
计算圆的相交点。这可以通过三角学轻松完成。可能没有交点(中心点之间的距离长于半径之和,在您的情况下可忽略)、一个点(中心点之间的距离等于半径之和,可忽略)或两个点。特殊情况:两个圆相同,或者移动圆较小且完全在主圆内。
如果有两个交点:从移动圆中取中心点,并在这些点之间画一条圆弧。
(我没有代码给你,但既然你喜欢数学......;-)
Assuming you know the center point and the radius of the two circles:
Calculate the points where the circles intersect. This can easily be done with trigonometry. There may be no intersection (distance between the center points is longer than the sum of the radiuses, ignorable in your case), one point (distance between center points is equal to the sum of the radiuses, ignorable), or two. Special cases: the circles are identical, or the moving circle ist smaller and completely inside the main circle.
If there are two intersection points: take the center point from the moving circle and draw an arc between those points.
(I have no code for you, but since you love maths... ;-)