论坛风格切换切换到宽版
  • 13602阅读
  • 44回复

如何判断椭圆与圆相交?激光弹问题..... [复制链接]

上一主题 下一主题
离线同意注册
 
发帖
1271
樱饼
0
博丽神社的喝茶券(威望)
0
春度
8
交易币
0
只看楼主 倒序阅读 楼主  发表于: 2009-06-27
这MS是一个数学和编程的问题...其实多半是数学....好吧我的数学是渣...所以发贴问吧....想不出来实在是....

情况是这样,想做激光弹,开始想的是矩形和圆形做碰撞检测,后来发现,好像不是很好判断的样子...数学渣的思路总是想找最简单的方法...

于是习惯成性的问管家大,管家大说可以试试用椭圆和圆相交判断,感觉这个好像应该比较和逻辑,但是...依然不知道怎么判断...数学上...

本来想如果只是半径的话也没啥...后来发现,好像还要做个旋转啥的,MS只是半径就不行了...于是再次数学渣...想不出来....

请问如何判断椭圆与圆相交,或者有其他的方法实现那个主角和激光条条的检测方法也好.
离线Z.Blade
发帖
1493
樱饼
10
博丽神社的喝茶券(威望)
4
春度
115
交易币
0
只看该作者 1楼 发表于: 2009-06-27
离线zavayev
发帖
392
樱饼
0
博丽神社的喝茶券(威望)
1
春度
12
交易币
0
只看该作者 2楼 发表于: 2009-06-27
判断椭圆与圆相交……下意识的想法:
把圆心作为一个点投影到以椭圆的某根半轴作为极轴的极坐标系中,这样就可以得到圆心与原点连线交椭圆的点的坐标了……然后就可以根据距离来判断是否相交…………
不过这样会用到数次三角函数运算,如果是底层的算法的话不推荐使用…………

其他更优化的方法……暂时还没想到……


吾辈还是太普通了……

THP_Wiki:东方求闻史纪 龟速填坑中……
离线pkrs999
发帖
67
樱饼
0
博丽神社的喝茶券(威望)
0
春度
10
交易币
0
只看该作者 3楼 发表于: 2009-06-28
把代表椭圆某个轴的向量单位化之后和圆心的坐标做点乘,就可以得到投影到极轴坐标系上的一维坐标,这个应该比三角函数快……
离线quifi
发帖
101
樱饼
0
博丽神社的喝茶券(威望)
0
春度
7
交易币
0
只看该作者 4楼 发表于: 2009-06-29
我看还是尽量用矩形和圆吧。转一下就可以了。
void shooting()
{
    for(;;) shooting();
}
离线h5nc
发帖
2724
樱饼
0
博丽神社的喝茶券(威望)
2
春度
738
交易币
0
只看该作者 5楼 发表于: 2009-06-29
矩形是比椭圆慢不少的。。。我是说矩形+椭圆同时存在。。
所以可以考虑屏蔽矩形。。。至少我没看到过歪的矩形弹出现在东方里。。。包括灵梦的符……

0x073《東方弾置場》开发版即将问世
【Leah】引擎问世
同人STG《叛境东方游》已经腰斩
《叛之境界无双篇》已死
离线quifi
发帖
101
樱饼
0
博丽神社的喝茶券(威望)
0
春度
7
交易币
0
只看该作者 6楼 发表于: 2009-06-29
那“灵梦的符”是什么形状的?
void shooting()
{
    for(;;) shooting();
}
离线同意注册
发帖
1271
樱饼
0
博丽神社的喝茶券(威望)
0
春度
8
交易币
0
只看该作者 7楼 发表于: 2009-06-29
内啥,2楼3楼大能给个简单的图解或是代码试判断一下么,数学渣的联想能力也很渣....

另外图是这样的,发现这个激光条是一段一段的,如果自机撞上去后,激光条中间会少一条,看样子好像是按一定间隔排列的椭圆么??

[attachment=69256]
发帖
306
樱饼
0
博丽神社的喝茶券(威望)
0
春度
44
交易币
0
只看该作者 8楼 发表于: 2009-08-26
问下H5大= =
红白的符是圆形的还是椭圆的?
---------------------------------------
我之前也一直以为那是矩形的= =
离线Wiksy
发帖
170
樱饼
0
博丽神社的喝茶券(威望)
1
春度
7
交易币
0
只看该作者 9楼 发表于: 2009-08-27
难道不是矩形么@_@
不管怎么看,判断矩形——圆形相交在速度和复杂度上都比判断椭圆——圆形相交简单才对,尤其是二维情况下。

其实我建议用圆扫过区域(swept circle)来近似椭圆,至少这样算起来只要初等几何
よろしい、ならば麻雀だ!
离线h5nc
发帖
2724
樱饼
0
博丽神社的喝茶券(威望)
2
春度
738
交易币
0
只看该作者 10楼 发表于: 2009-08-27
圆的。请参考打飞机人士对YYC某八卦XXX符的研究

0x073《東方弾置場》开发版即将问世
【Leah】引擎问世
同人STG《叛境东方游》已经腰斩
《叛之境界无双篇》已死
离线franniss
发帖
1281
樱饼
0
博丽神社的喝茶券(威望)
1
春度
439
交易币
0
只看该作者 11楼 发表于: 2009-08-27
矩形根本无法像东方那样擦弹。
从前有一只熊猫,到酒店点了菜就吃,吃完从怀里掏出枪乱放几枪就走了。酒店老板赶快追来!熊猫怒道,你去查字典!老板一翻字典: Panda:an animal,eats shoots and leaves のヮの
离线h5nc
发帖
2724
樱饼
0
博丽神社的喝茶券(威望)
2
春度
738
交易币
0
只看该作者 12楼 发表于: 2009-08-28
圆形和圆形是最初等的运算,除非是正交矩形
如管家所说,要不是长到一定程度,矩形是无法擦弹玩的

0x073《東方弾置場》开发版即将问世
【Leah】引擎问世
同人STG《叛境东方游》已经腰斩
《叛之境界无双篇》已死
离线同意注册
发帖
1271
樱饼
0
博丽神社的喝茶券(威望)
0
春度
8
交易币
0
只看该作者 13楼 发表于: 2009-08-30
那个....由于还是不知道怎么算,已经改用像素写了......

或者哪位扔个公式出来,感激不尽,子弹不太多的情况下,用像素到是很方便.
离线h5nc
发帖
2724
樱饼
0
博丽神社的喝茶券(威望)
2
春度
738
交易币
0
只看该作者 14楼 发表于: 2009-08-31
  1. bool checkCollisionEllipse(float aimx, float aimy, float rPrep, float rParal, float rotCos, float rotSin, float rOri)
  2. {
  3.     float longr = rPrep > rParal ? rPrep : rParal;
  4.     if((fabsf(x-aimx)>longr+rOri)||(fabsf(y-aimy)>longr+rOri))
  5.         return false;
  6.     float newx,newy;
  7.     newx = (float)fabsf((rotSin*(aimx-x)-rotCos*(aimy-y)));
  8.     newy = (float)fabsf((rotCos*(aimx-x)+rotSin*(aimy-y)));
  9.     if(newx*newx*(rParal+rOri)*(rParal+rOri)+newy*newy*(rPrep+rOri)*(rPrep+rOri) <= (rPrep+rOri)*(rPrep+rOri)*(rParal+rOri)*(rParal+rOri))
  10.         return true;
  11.     return false;


懒得改or说明了……

0x073《東方弾置場》开发版即将问世
【Leah】引擎问世
同人STG《叛境东方游》已经腰斩
《叛之境界无双篇》已死
快速回复
限100 字节
 
上一个 下一个