游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 大树懒

[求助]我数学差,请问怎么计算一个圆是否和矩形相交?

[复制链接]

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-10-5 18:06:00 | 显示全部楼层

Re: Re: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形

Jeminai: Re: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?



其实我的方法如果圆在矩形的四个角附近会有点不精确,但这点儿误差通常还是可以接受的。 [em5]


嗯,理论上不是直角,会有个弧度。

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-10-5 18:08:00 | 显示全部楼层

Re: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?

iron: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?

我想到一个更简单有效的方法。
逆向思考:矩形和圆不相交只有4种情况----圆在矩形的上方、下方、左边、右边。
除了这4种情况,矩形和圆就是相交的。
这个方法简单,准确,高效!


我已经说了,不看回帖的吗?

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2007-10-5 18:37:00 | 显示全部楼层

Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?

2楼正解

32

主题

108

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2007-10-5 19:09:00 | 显示全部楼层

Re: Re: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形

Enigmaya: Re: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?
我已经说了,不看回帖的吗?

你说的是Jeminai的方法吗?Jeminai自己都说了这个方法在4个角的地方会产生误差。我的方法准确无误

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-10-5 23:49:00 | 显示全部楼层

Re: Re: Re: Re:[求助]我数学差,请问怎么计算一个圆是否和矩

iron: Re: Re: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?


你说的是Jeminai的方法吗?Jeminai自己都说了这个方法在4个角的地方会产生误差。我的方法准确无误


哪里准确无误了……
“矩形和圆不相交只有4种情况----圆在矩形的上方、下方、左边、右边。”
这个明显就错了,圆在矩形四个附近时是有可能出现以上都不符合并且也不相交的情况的
而且你说的方法还只能用于AABB的矩形,不能用于任意矩形

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-10-6 02:31:00 | 显示全部楼层

Re: [求助]我数学差,请问怎么计算一个圆是否和矩形相交?

高效,精确的方法
将矩形扩展为圆角矩形,然后判断圆心是否在圆角矩形内,步骤如下

圆心C,半径为r,矩型的两条边VA,VB

1 计算两条边长,val,vbl

2 作出矩型的两条中轴线LA,LB,其中LA垂直于VA,LB垂直于VB
  val/2和vbl/2既为矩型的顶点到LA,LB的距离

3 计算圆心C到LA,LB的距离cal,cbl

4 如果 cal<=val/2 and cbl<=vbl/2 则相交
  (圆心在矩型中)

5 如果 cal<=val/2+r and cbl<=vbl/2 or cal<=val/2 and cbl<=vbl/2+r 则相交
  (圆心在矩型外,但圆与矩型相交)

6 如果 cal<=val/2+r and cbl<=vbl/2+r 则进一步判断
  (圆心在矩型外,并且圆心在矩型的顶点外)

4-6 可以合并为
  如果 cal>val/2+r or cbl>vbl/2+r 则不相交
  如果 cal<=val/2 or cbl<=vbl/2 则相交

7 cal-=val/2,cbl-=vbl/2,如果 cal^2+cbl^2<=r^2 则相交
  (判断圆是否与矩型的顶点相交)

32

主题

108

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2007-10-6 09:01:00 | 显示全部楼层

Re: Re: Re: Re: Re:[求助]我数学差,请问怎么计算一个圆是否和

psic: Re: Re: Re: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?



哪里准确无误了……
“矩形和圆不相交只有4种情况----圆在矩形的上方、下方、左边、右边。”
这个明显...

嘿嘿,献丑了,我的方法在4个角的地方会有错误。:D

6

主题

471

帖子

1047

积分

金牌会员

Rank: 6Rank: 6

积分
1047
发表于 2007-10-6 10:45:00 | 显示全部楼层

Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?

3种情况返回true
1.相交
2.AABB包含球
3.球包含AABB
bool        cM3d_Cross_AabSph(const cM3dGAab* pAab,const cM3dGSph* pSph)
{
        if(pAab->vMin.x > pSph->vCenter.x + pSph->fRadius)
                return false;
        if(pAab->vMax.x < pSph->vCenter.x - pSph->fRadius)
                return false;

        if(pAab->vMin.z > pSph->vCenter.z + pSph->fRadius)
                return false;
        if(pAab->vMax.z < pSph->vCenter.z - pSph->fRadius)
                return false;

        if(pAab->vMin.y > pSph->vCenter.y + pSph->fRadius)
                return false;
        if(pAab->vMax.y < pSph->vCenter.y - pSph->fRadius)
                return false;

        return true;
}

PS:2D版检测省略当中的z比较.

14

主题

251

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
发表于 2007-10-7 05:21:00 | 显示全部楼层

Re: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?

xjyhust: Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?

....
ls学啥的啊。。。
直接判断矩形四个点和圆心的距离就可以了

胡扯

14

主题

251

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
发表于 2007-10-7 05:23:00 | 显示全部楼层

Re:[求助]我数学差,请问怎么计算一个圆是否和矩形相交?

2楼正解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-20 19:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表