计算几何中的线段相交判断问题
2015-06-14 12:13
531 查看
完整代码如下:
/*点的加减,标量乘除操作*/
struct Point
{
double x, y;
Point(double _x = 0, double _y = 0):x(_x), y(_y){}
Point operator + (Point& other)
{
Point p(this->x + other.x, this->y + other.y);
return p;
}
Point operator - (Point& other)
{
Point p(this->x - other.x, this->y - other.y);
return p;
}
Point operator * (int f)
{
Point p(this->x * f, this->y * f);
return p;
}
Point operator / (int f)
{
Point p(this->x / f, this->y / f);
return p;
}
};
/*点的叉乘*/
double cross(Point&a, Point &b)
{
return a.x * b.y - a.y * b.x;
}
/*判断两个线段是否相交,其中p1->p2为线段,p3->p4为线段*/
bool isIntersect(Point& p1, Point& p2, Point& p3, Point& p4)
{
Point p12 = p2 - p1;
Point p34 = p4 - p3;
Point p31 = p1 - p3;
Point p13 = p3 - p1;
double c1 = cross(p13, p34);
double c2 = cross(p12, p34);
double c3 = cross(p12, p31);
if (c2 < 0) {
c2 = -c2; c1 = -c1; c3 = -c3;
}
if (c2 != 0 && c1 >= 0 && c1 <= c2 && c3 >= 0 && c3 <= c2) return true;
return false;
}
相关文章推荐
- Orcle索引及约束管理
- hdu 5269 ZYB loves Xor I
- js-回车事件控制
- 多线程
- WebSocket使用javax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0)向页面方法发送对象
- 波利亚计数
- unity开发:Qt C++与unity之间UDP网络通信
- 游戏 动画
- java 关键字null
- 记录学习MVC过程,MVC简单路由(三)
- 单节点伪分布式Hadoop配置
- 图片控件的尺寸问题
- 延长LaunchImage的显示时间
- 063 android。mk 自动生成
- sql-将一个表中的数导入另一个表中
- Java并发编程-04-线程局部变量
- 关于 block 中使用copy 需要注意的
- Filter FASTA files
- 【iOS开发-网络】关于大文件下载
- mongodb培训