android 2d arc collision detection

我只是一个虾纸丫 提交于 2019-12-21 19:27:21

问题


i have a rotated arc drawn using android 2d graphics

c.drawArc(new RectF(50, 50, 250, 250), 30, 270, true, paint);

the arc will rotate while the game is running ,

i wanna know how i can detect if any other game objects(rects ,circles) collide with it ??

this is the first time for me to write a game :)

i saw something like this in http://hakim.se/experiments/html5/core/01/

Thanks in advance


回答1:


Arc collisions are slightly harder then normal collisions, but using boolean algebra you can easily check if a given point is inside your arc.

Take a look at the following picture.

There are 3 objects here. The black sphere, this visualizes your arc, if something collides with it, it might be inside your arc. The red sphere on top of the black sphere, this visualizes the 'inside' of the arc, if something is inside the red sphere, it's definately not 'inside' the arc. Now there is also the green triangle that Visualizes the 'cut-off' of your arc, anything inside the green triangle is also definately not in your arc.

Testing if something is inside the black sphere is easy. (object's distance to center of sphere <= radius of sphere). Same for the red sphere. The green triangle is a bit tricky, you first have to construct this. Find the start and end radians of your arc. and rotate a unit vector by start radians. Then rotate a unit vector by end radians. Lengthen both these vectors by 2 * the radius of the black sphere. Now use the center point of your arc and the positions of two vectors with added the center position as the 3 points of the triangle. You can then use one of the point-triangle collision solvers: http://www.bing.com/search?q=point+triangle+collision&go=&form=QBLH&scope=web

So remember: collision with arc = (collision with black sphere) && !(collision with red sphere) && !(collision with green triangle).



来源:https://stackoverflow.com/questions/6307114/android-2d-arc-collision-detection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!