点积和差积
来源:互联网 发布:wlan与移动数据 编辑:程序博客网 时间:2024/05/16 01:08
程序=编程语言+数据结构+算法
struct point_T {
int x, y;
};
struct segment_T {
point_T a, b;
};
int cross(point_T a, point_T b, point_T c)
{
//叉积,结果大于0则AB在AC的顺时针方向上,小于0在逆时针方向,等于0则共线
int x1 = b.x -a.x;
int y1 = b.y -a.y;
int x2 = c.x -a.x;
int y2 = c.y -a.y;
return (x1 * y2- x2 * y1);
}
int dot(point_T a, point_T b, point_T c)
{
//点积,结果大于0则夹角小于90度,小于0则大于90度,等于0则垂直
int x1 = b.x -a.x;
int y1 = b.y -a.y;
int x2 = c.x -a.x;
int y2 = c.y -a.y;
return (x1 * x2+ y1 * y2);
}
int segcrossSimple(segment_T sega, segment_T segb)
{
//判断两线段是否相交(规范相交,非规范相交)
int d1 =cross(sega.a,sega.b,segb.a);
//得用叉积原理判断另外一线段的两点是否在另一线段的两侧
int d2 =
cross(sega.a,sega.b,segb.b);
int d3 =
cross(segb.a,segb.b,sega.a);
int d4 =cross(segb.a,segb.b,sega.b);
//规范相交
if(d1 * d2< 0&& d3 *d4 < 0)
//一线段的两端点在另一线段的两侧,相交
return 1;
//非规范相交
if(d1 == 0&&dot(segb.a,sega.a, sega.b)<= 0)
//如果线段共线,判断是否在线段上
return 1;
if(d2 == 0&&dot(segb.b,sega.a, sega.b)<= 0)
return 1;
if(d3 == 0&&dot(sega.a,segb.a, segb.b)<= 0)
return 1;
if(d4 == 0&&dot(sega.b,segb.a, segb.b)<= 0)
return 1;
return 0;
}
int inRectangle(point_T p, int x1, int x2, int y1, int y2)
{
return (p.x>= x1&& p.x<= x2&& p.y>= y1&& p.y<= y2);
}
原文地址:http://hi.baidu.com/zmqblog/item/99fa57d60df9832539f6f7f4
- 点积和差积
- 向量的点积,差乘,unity 四元数
- 和差化积&积化和差
- 积化和差、和差化积公式
- 大众化功能点必需和差异化功能点相辅相成!
- 两个数的和、差、积、商
- 和差化积公式 和 积化和差公式
- 外汇点差
- 点积和叉积
- 差了点什么呢?
- 现货黄金点差是多少
- cf 340b差积
- 向量的点积和叉积
- 向量的点积和叉积
- 叉积和点积的应用
- 向量,点积和叉积
- 计算2个复数的和、差、积、商(解决)
- 求两数的和,差,积(指针函数作为形参)
- qsort 应用大全
- 优化理论
- 理解C#中的委托和事件
- 测试文件拷贝/应用程序打开关闭测试
- linux线程操作函数
- 点积和差积
- 搭建胜过Apache十倍的Web服务器
- SQLite的一些命令语句
- 为TWaver HTML5的Tree组件增加鼠标滑过效果
- AS3右键菜单+多个右键菜单
- NDK开发环境搭建_r8
- 在eclipse中新建自己的工作集
- linux设备驱动--I2C驱动理论篇
- SQL Server 2008 对等复制冲突解决一例