前段时间做计算机图形学的东西,现在闲下来,对代码稍作整理,都是些实用的函数

//判断是否相交
//(X1,Y1)(X2,Y2)前线
//(X3,Y3)(X4,Y4)后线
//(x,y)交点坐标
//相交在前线上return 1,后线return 2,交于外面return 3,不相交return 0
short  CTriObject::MyCross(double X1,double Y1,double X2,double Y2,double X3,double Y3,double X4,double Y4,double &x,double &y)
{
double k1,k2;
if((X1==X2)&&(Y1==Y2)&&(Y3==Y4)&&(X3==X4))
{
return 0;
}
if((X1==X2)&&(Y1==Y2))
{
if((X3==X4)&&(X1==X3))
{
x=X1;
y=Y1;
return 1;
}
else if(Y2==((X2-X3)*(Y4-Y3)/(X4-X3)+Y3))
{
x=X1;
y=Y1;
return 1;
}
}
if((Y3==Y4)&&(X3==X4))
{
if((X2==X1)&&(X1==X3))
{
x=X3;
y=Y3;
return 2;
}
else if(Y3==((X3-X1)*(Y2-Y1)/(X2-X1)+Y1))
{
x=X3;
y=Y3;
return 2;
}
}
if(X1!=X2)
{
k1=(Y2-Y1)/(X2-X1);
if(X3!=X4)
{
k2=(Y4-Y3)/(X4-X3);
if(k1==k2)
{
return 0;
}
x=(Y3-Y1-k2*X3+X1*k1)/(k1-k2);
y=k1*(x-X1)+Y1;
if(((X1-x)*(X2-x)<0||(X1-x)*(X2-x)==0)&&((Y1-y)*(Y2-y)<0||(Y1-y)*(Y2-y)==0))
return 1;
if(((X3-x)*(X4-x)<0||(X3-x)*(X4-x)==0)&&((Y3-y)*(Y4-y)<0||(Y3-y)*(Y4-y)==0))
return 2;
if((X3-x)*(X4-x)>0&&(Y3-y)*(Y4-y)>0&&(X1-x)*(X2-x)>0&&(Y1-y)*(Y2-y)>0)
return 3;
}
if(X3==X4)
{
x=X3;
y=k1*(X3-X1)+Y1;
return 1;
}
}
else
{
if(X3!=X4)
{
k2=(Y4-Y3)/(X4-X3);
x=double(X1);
y=k2*(X1-X3)+Y3;
return 2;
}
if(X3==X4)
{
return 0;
}
}
return 0;
}

C++ 实现两线段是否相交、相交情况、若相交求出交点坐标相关推荐

  1. 编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值

    编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值 目录 题目描述 代码实现 题目描述 序列重排:给一个长度为n的序列A,求找出 ...

  2. matlab 经纬度插值,给定两个经纬度,以及插值n,求出中间n个经纬度的值

    满意答案 在科技工程中,除了要进行一定的理论分析外,通过实验.观测数据,做分析.处 理也是必不可少的一种途径.由于实验测定实际系统的数据具有一定的代表性,因此在处理 时必须充分利用这些信息:又由于测定 ...

  3. 两条直线求交点c语言,C§ 3.3.1两条直线的交点坐标(5页)-原创力文档

    § 3.1两条直线的交点坐标 学习目标 1.掌握判断两直线相交的方法:会求两直线交点坐标: 2.体会判断两直线相交中的数形结合思想. 学习过程 一.课前准备: (预习教材P112~ P114,找出疑 ...

  4. 求四点的交点(两线段的交点)

    1.根据四点直接计算出交点坐标: def calPoint(pt1, pt2, imgShape):pt11X = pt1[0]pt11Y = pt1[1]pt12X = pt1[2]pt12Y = ...

  5. Matlab计算两条直线的交点坐标

    %% 已知两条直线的斜率和截距,求交点坐标 function [x,y]=linecross(k1,b1,k2,b2)x=[];y=[];if k1==k2&b1==b2disp('chong ...

  6. Java求两个数的最大公约数及最小公倍数、求多个数的最大公约数及最小公倍数

    今天参加腾讯笔试,做编程题时在最小公倍数.最大公约数这些这么简单的知识点上卡壳了,自信心受到强烈的打击,下来后猛复习了这方面的相关编程知识. 有以下几个关键点: 1.任意正整数的最大公约数.最小公倍数 ...

  7. PHP求1到100所有偶数的和,php求出两数之间所有偶数之和

    定义Show类 类中定义方法 sum 方法中传入两个数 在方法体内部求出两个数之间所有偶数得和 将求出得结果返回 输出返回后的结果 输出形式如下 两个数之间所有偶数得和为: 30 注意判断:传入得两个 ...

  8. 判断三维空间两线段是否相交(附代码)

    文章目录 一.推导过程 二.MATLAB代码   博文: 计算几何--判断两线段是否相交,提供了判断两线段是否相交的方法以及代码.然而,只是考虑了平面的情况.本博文提供一种简单有效的方法判断三维空间两 ...

  9. 判断两线段是否相交,并求交点

    首先, 上个示意图. 根据图示, 线段a表示为端点a1和a2, 线段b表示为端点b1和b2. 为了利用向量的叉乘关系, 将线段的端点看成四个向量, 下面用粗体表示向量. 根据向量运算可知 a=a2-a ...

最新文章

  1. linux按文件名排序ls,linux – 如何使用shell脚本按名称对文件进行排序
  2. Nat. Mach. Intell. | 基于神经网络的迁移学习用于单细胞RNA-seq分析中的聚类和细胞类型分类...
  3. Java线程详解(16)-条件变量
  4. arm9 中断向量 重定位_关于STM32中断向量表的位置 、重定向问题
  5. 小鹏汽车北京车展发布免费加电、电池租赁计划以及低空飞行汽车
  6. 图解读写锁:pthead_rwlock_t
  7. 麻省理工学院推出数据美国大数据可视化工具
  8. 【通信】基于matlab GUI循环码编译码器【含Matlab源码 692期】
  9. Spring四个核心包
  10. RAC环境报错ORA-00239: timeout waiting for control file enqueue排查
  11. Python爬虫入门教程13:高质量电脑桌面壁纸爬取
  12. Vue项目:IE11中地址栏直接改变路由页面不跳转bug
  13. SAP中总账科目行项目不显示的处理方法
  14. 校园外卖系统 - 「农职邦」微信原生云开发小程序
  15. 自研代码率超70%,国产大数据基础软件第一股星环科技成功上市!
  16. java下载文件到服务器_java代码实现上传文件到文档服务器、下载文档服务器文件...
  17. SpringBoot将数据生成Excel表
  18. php宠物网站源代码,PHP响应式中英双语宠物医院网站整站源码(自适应手机移动端) dedecms内核...
  19. [BZOJ]4832 抵制克苏恩 期望dp
  20. HTML+CSS+JS`管理系统网站设计——学生信息管理系统模板 (13页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业

热门文章

  1. 浙江大学软件学院人工智能保研面经2021
  2. dpdk-20.11 编译和安装
  3. Altium 布线技巧
  4. Firebase使用总结(早期)
  5. 正则匹配替换最后一位字符
  6. android ping tools,PingTools
  7. 我和Ruby之父松本行弘的握手
  8. 笔记本电脑卡顿问题原因
  9. Numpy攻略系列:repeat函数
  10. 用c语言交通信号灯论文,plc交通信号灯毕业论文.doc