任何人都有一个简单的算法呢?无需旋转或任何东西。只需找出由两点构成的线段与正方形相交检测线段是否相交正方形
4
A
回答
4
此代码应该做的伎俩。它检查线条与边线相交的位置,然后检查它是否在正方形的宽度内。返回的intesections的数量。
float CalcY(float xval, float x0, float y0, float x1, float y1)
{
if(x1 == x0) return NaN;
return y0 + (xval - x0)*(y1 - y0)/(x1 - x0);
}
float CalcX(float yval, float x0, float y0, float x1, float y1)
{
if(x1 == x0) return NaN;
return x0 + (yval - y0)*(y1 - y0)/(x1 - x0);
}
int LineIntersectsSquare(int x0, int y0, int x1, int y1, int left, int top, int right, int bottom)
{
int intersections = 0;
if(CalcX(bottom, x0, y0, x1, y1) < right && CalcX(bottom, x0, y0, x1, y1) > left ) intersections++;
if(CalcX(top , x0, y0, x1, y1) < right && CalcX(top , x0, y0, x1, y1) > left ) intersections++;
if(CalcY(left , x0, y0, x1, y1) < top && CalcY(left , x0, y0, x1, y1) > bottom) intersections++;
if(CalcY(right , x0, y0, x1, y1) < top && CalcY(right , x0, y0, x1, y1) > bottom) intersections++;
return intersections;
}
注:此代码是理论上的,可能是不正确的,因为它没有经过测试
1
0
这里有一个办法:
- 用X坐标
正方形的顶点排序 - 排序的线的通过x坐标
端点 - 计算从行的其minX结束角度到每个中间的两个的(由X-坐标)的正方形顶点
- 计算线路
的角度 - 如果线的角度是可能的角度,所有你需要做的就是长度检查,是maxX线的末端>方形的minX顶点
如果广场直接面对线条,这可能会中断,在这种情况下,通过检查广场的第一个边缘来处理它。
相关问题
- 1. 如何检查线段是否与矩形相交?
- 2. 检查多边形是否自相交
- 3. 确定线段是否与圆形相交的公式(平面)
- 4. 如何检查两条线段是否相交?
- 5. 检测光线是否与物体相交的函数
- 6. 检查线段是否与从特定点绘制的垂直线相交?
- 7. 检测旋转矩形相交
- 8. 线段球相交测试C++
- 9. 线段相交,数值稳定测试
- 10. 检测与精灵相交的光线
- 11. MKPolyline检测自相交线目标C
- 12. 一维线段/量程相交测试:解决方案名称?
- 13. 如何确定线是否相交简单多边形?
- 14. 一条线是否与多边形相交?
- 15. 如何检查点是否与多边形相交
- 16. 如何检查Postgres中的两个多边形是否相交?
- 17. 检查数千个矩形是否相交
- 18. 如何在matlab中得到直线矩形相交线段
- 19. 确定是否两条线段的公差相交
- 20. 用于确定两个线段是否相交的C++程序
- 21. 检测与给定矩形相交的矩形的快速方法
- 22. 如何轻松检测2个ROI是否与OpenCv相交?
- 23. 正方形碰撞检测iPhone
- 24. 正方形检测,图像处理
- 25. 使用opencv2.4检测正方形
- 26. 用Python3.5检测正方形OpencCV
- 27. Mathematica:非相交线段
- 28. 检查日期是否相交?
- 29. Vtk检查polydata对象是否相交
- 30. 快速检查阵列是否相交
我认为CalcX需要返回x0 +(yval - y0)*(x1 - x0)/(y1 - y0); – 2014-02-04 23:34:59