算法以准确检测正方形和圆之间的重叠
Algorithm for accurate detection of overlap between a square and a circle?
i正在实现(在C 中)一种检测何时在2D平面上两个静态的,轴对齐的形状之间发生重叠的方法。形状是正方形或圆形,因此我需要考虑三种重叠的情况:正方形,圆圈和圆方方。
正方形和圆圈很简单,但是我努力在网上找到有关正确算法的任何可靠信息,用于计算方形圆形重叠。
我知道我可以将正方形嵌入一个粗糙的方法中(反之亦然),但是我对被认为是更精确的最清洁方法感兴趣?
在线研究它表明这个问题有一个"正确"的答案,但尚不清楚该答案到底是什么。
这是一种简单快速的算法:
bool doesSquareCircleOverlap(float squareCenterX, float squareCenterY, float squareHalfSize, float circleCenterX, float circleCenterY, float circleRadius) {
float x = fabs(circleCenterX - squareCenterX) - squareHalfSize;
float y = fabs(circleCenterY - squareCenterY) - squareHalfSize;
if (x>0) {
if (y>0) {
return x*x + y*y<circleRadius*circleRadius;
} else {
return x<circleRadius;
}
} else {
return y<circleRadius;
}
}
请注意,正方形由中心表示,。
基本上,它的作用是:
- 它使用
fabs()
去除对称案例 - 将角落放入原点
- 检查圆的中心是哪个区域,以确定从圆的正方形上的最接近点。如果关闭点比
circleRadius
接近,则有一个重叠。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- Ardunio UNO解决了多个重叠的定时器循环
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 算法以准确检测正方形和圆之间的重叠
- 如何避免int(xxx)_t之间的重叠,并使我的代码正确
- 重叠分数在两个BB之间
- 在可能重叠的范围之间复制类