游戏开发论坛

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

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

[复制链接]

32

主题

108

帖子

108

积分

注册会员

Rank: 2

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

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

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

当一个大的矩形包含一个很小的圆的时候就不成立了

2

主题

141

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2007-10-7 12:13:00 | 显示全部楼层

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

快速的方法:
便历矩型的4个顶点,判断点到圆心的距离是否小于圆的R
当累积小于等于3个点符合该条件,该矩型一定和圆相交
数学不好就把它补好

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2007-10-7 13:22:00 | 显示全部楼层

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

其实最直观的是扩边.
计算最方便的还是计算圆心到4条边的距离.

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2007-10-7 13:25:00 | 显示全部楼层

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

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

快速的方法:
便历矩型的4个顶点,判断点到圆心的距离是否小于圆的R
当累积小于等于3个点符合该条件,该矩型一定和圆相交
数学不好就把它补好


你觉得当一个巨大的矩形套着一个很小的圆的时候.算不算相交呢?
我数学也很烂.呵呵.

2

主题

141

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2007-10-7 15:30:00 | 显示全部楼层

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

楼上的兄弟,
那个叫"包含",不叫"相交"
现在的命题是"相交"

0

主题

1

帖子

17

积分

新手上路

Rank: 1

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

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

2楼说了真正交的情况,16楼包含了圆在矩形内的情况,各取所需吧!

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

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

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

2楼的方法也是有问题的
包含分两种情况的,矩形包含圆和圆包含矩形
如果用2楼的方法计算的话,矩形包含圆的情况会判断为不相交,而圆包含矩形的情况会判断为相交,互相矛盾了……

15

主题

32

帖子

38

积分

注册会员

Rank: 2

积分
38
发表于 2007-10-8 13:41:00 | 显示全部楼层

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

/**
         * 计算椭圆和矩形是否相交
         * (x/rx)^2 + (y/ry)^2 = 1;
         * left is: (x*ry)^2 + (y*rx)^2
         * right is: (rx*ry)^2
         *
         * if(left > right) out
         * else in
         * @param x0 - 椭圆圆心x
         * @param y0 - 椭圆圆心y
         * @param rx - 椭圆x轴半径
         * @param ry - 椭圆y轴半径
         * @param xmin - 矩形左上角x
         * @param ymin - 矩形左上角y
         * @param xmax - 矩形右下角x
         * @param ymax - 矩形右下角y
         * @return
         */
        public static final boolean isColliside(int x0, int y0, int rx, int ry, int xmin, int ymin, int xmax, int ymax) {
                //如果圆心点就在矩形内部, 那么就直接返回true
                if(isIntersect(x0, y0, x0, y0, xmin, ymin, xmax, ymax)) {
                        return true;
                }
               
                //首先找到矩形距离圆心的最近点
                int x = x0, y = y0;
               
                if(x < xmin) {
                        x = xmin;
                } else if(x > xmax) {
                        x = xmax;
                }
               
                if(y < ymin) {
                        y = ymin;
                } else if(y > ymax) {
                        y = ymax;
                }
               
                int dx = x - x0;
                int dy = y - y0;
                dx *= dx;
                dy *= dy;
               
                rx *= rx;
                ry *= ry;
               
                dx *= ry;
                dy *= rx;
               
                if( dx + dy <= rx*ry) {
                        return true;
                }
               
                return false;
        }

6

主题

307

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2007-10-8 17:06:00 | 显示全部楼层

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

2楼忽略了一个情况,矩形包含园,况且计算点到直线的距离耗费不小吧

简单点,判断圆心在不在矩形内+判断矩形4个点在不在园内

33

主题

544

帖子

554

积分

高级会员

Rank: 4

积分
554
 楼主| 发表于 2007-10-8 17:16:00 | 显示全部楼层

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

问题已经解决了,大家的回复真多呀,哈哈,谢谢各位了;)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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