2009-11-04 93 views
0

我正在创建一个应用程序,我将在屏幕上绘制两个圆圈,一个带有较小圆圈的大圆圈。我希望用户能够在大圆的内部或外部触摸/拖动屏幕,并在该方向上移动较小的圆。如果用户触摸大圈外侧,则小圈不会超出大圈的边界。叠加图像

随着我所做的研究,我可以很容易地画出彼此的两个圆圈,并处理较小图像的运动。但是,我看不到一个简单的方法来限制小圆圈留在大圆圈内。我发现的所有东西都是裁剪,但这只会导致较小的圆只能部分绘制。有没有人有一个很好的参考我可以用来开始研究如何这是可能的?谢谢。

回答

0

比方说大圈子有收音机Rb和中心Cb。内圈将是Ri和中心Ci。
如果您将Ci到Cb的距离(从内圆中心到大圆中心)设置为小于Rb-Ri(比内Radous的大半径的其余部分),您将始终拥有里面的内圈..你明白了吗?只需画出它,看看它总是如此)距离(Ci到Cb)< Rb-Ri 您需要做的唯一事情就是检查它是否属实。从词到的Cb

距离为Math.Sqrt(math.Pow(CIX-CBX,2)+ Math.Pow(CIY-CBY,2))

+0

在纸上画出来,它似乎是有道理的。我今晚必须打球。 – Mike 2009-11-04 22:46:36

+0

在极坐标中做它可能会更容易(当然要考虑它)。 – 2009-11-04 23:32:51

+0

您需要将笛卡尔坐标(从屏幕)转换为极坐标,其中包含的操作数量相当于计算两点(两个中心)之间的距离, – jmayor 2009-11-05 21:10:23

1

我认为你最好打赌是自己做数学,限制小圈子的运动。使用裁剪不会限制该圆从大圆边框的“外侧”出现,当它超出有效边界时,只会部分地画出较小的圆。

你将不得不检查小圆圈的中心是具有相同中心为大圈,但与一diamater的假想圆内(diameterLargeCircle - diameterSmallCircle)

+0

这是我想通。我希望有一种方法可以在没有数学的情况下完成,因为我确定计算大圆上的所有点都很困难。 – Mike 2009-11-04 22:02:06

+0

嘿,不需要计算外圈上的所有点.. – jmayor 2009-11-04 22:21:39