【编程题目】圆形是否和正方形相交☆

第 23 题(算法):
用最简单,最快速的方法计算出下面这个圆形是否和正方形相交。"
3D 坐标系 原点(0.0,0.0,0.0)
圆形:
半径 r = 3.0
圆心 o = (*.*, 0.0, *.*)
正方形:
4 个角坐标;
1:(*.*, 0.0, *.*)
2:(*.*, 0.0, *.*)
3:(*.*, 0.0, *.*)
4:(*.*, 0.0, *.*)

 

思路:

自己分类讨论了一下,需要计算四个角到圆心的距离大于半径,且四条边到圆心的距离大于半径。需要计算8个值。写不出代码,太繁琐了。

网上的答案,非常值得学习。http://bbs.csdn.net/topics/330232890

 先要做平移,然后用下面的代码,(dx1,dx2)总是正方形中距离圆心最近的点。

//将矩形中心置于原点(坐标(0, 0),不在原点的可做平移),矩形的长、宽分别为w、h。圆为动圆,圆心坐
//标为 (ox,oy),圆半径为r。则判断圆与矩形是否相交:
bool Collision(int ox, int oy, int w, int h, int r)
{
    int dx = min(ox, w * 0.5);
    int dx1 = max(dx, -w*0.5);

    int dy = min(oy, h * 0.5);
    int dy1 = max(dy, -h * 0.5);

    return (dx1 - ox) * (dx1 - ox) + (dy1 - oy) * (dy1 - oy) <= r * r;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值