用面向对象的思维设计相关类,从而实现直线与直线、直线与圆、直线与矩形的交点。

基本思想:
直线与直线,直线与圆:利用公式直接求解
直线与矩形:分解成直线与直线的交点:

#include <iostream>#include <math.h>class VecPosition//坐标{public:double mx;double my;public:void setpoint(double x,double y){mx = x;my = y;}};class Line直线{public:double a;double b;//ax+by+c=0double c;public:void setLine(double ma,double mb,double mc){a=ma;b=mb;c=mc;}};class Circle圆{public:VecPosition
center;double R;public :void setcircle(VecPosition my_center,
double my_R){center = my_center;R = my_R;}};class Rectangel矩形{public:VecPosition top;VecPosition bottem;public:void setRectangel(VecPosition
mytop,VecPosition mybottom){top=mytop;bottem=mybottom;}};using namespace std;直线与直线的交点//VecPosition
LinecrossLine(Line l1,Line l2){VecPosition cross;double k1=(-1)*l1.a/l1.b;double k2=(-1)*l2.a/l2.b;double d;if(k1==k2){cout<<"没有交点"<<endl;return cross;}else{d=l1.a*l2.b - l2.a*l1.b;cross.mx = (l1.b*l2.c-l2.b*l1.c)/d;cross.my = (l1.c*l2.a-l2.c*l1.a)/d;return cross;}}直线与圆的交点//void LinecrossCircle(Line
l,Circle c){double k;double b;double dc;//直线与与圆心的距离double x1,y1,x2,y2;double cx=c.center.mx;//cx,cy为圆心坐标;double cy=c.center.my;double r=c.R;//圆的半径;if(l.b!=0){k=(-1)*l.a/l.b;//转换为y=kx+b;b=(-1)*l.c/l.b;}else{k=0;b=(-1)*l.c/l.a;}dc =
(fabs(l.a*c.center.mx+l.b*c.center.my+l.c))/sqrt(l.a*l.a+l.b*l.b);//求直线与圆心的距离double
f=sqrt((k*k+1)*r*r-cx*cx*k*k+2*(cx*cy+b*cx)*k-cy*cy-2*b*cy-b*b);//辅助运算if(l.b!=0){if(dc>c.R){cout<<"圆与直线没有交点"<<endl;}else if(dc==c.R){x1=((-1)*f+(cy+b)*k+cx)/(k*k+1);y1=(-1)*(k*(f+cx)+cy*k*k-b)/(k*k+1);cout<<"圆与直线只有一个交点,交点x="<<x1<<",y="<<y1<<endl;}else{x1=((-1)*f+(cy+b)*k+cx)/(k*k+1);y1=k*x1+b;x2=(f+(-1)*(cy+b)*k-cx)/(k*k+1);y2=k*x2+b;cout<<"第一个交点,("<<x1<<","<<y1<<")"<<endl;cout<<"第二个交点,("<<x2<<","<<y2<<")"<<endl;}}else// x=-c/a的情况;{if(dc>c.R){cout<<"圆与直线没有交点"<<endl;}else if(dc==c.R){x1=((-1)*f+(cy+b)*k+cx)/(k*k+1);y1=(-1)*(k*(f+cx)+cy*k*k-b)/(k*k+1);cout<<"圆与直线只有一个交点,交点x="<<y1<<",y="<<x1<<endl;}else{x1=((-1)*f+(cy+b)*k+cx)/(k*k+1);y1=(-1)*(k*(f+cx)+cy*k*k-b)/(k*k+1);cout<<"第一个交点,("<<y1<<","<<x1<<")"<<endl;cout<<"第二个交点,("<<y1<<","<<(-1)*x1<<")"<<endl;}}}直线与矩形的交点//Line getLine(VecPosition
top,VecPosition bottom)//由两个点获得直线{Line lTemp;lTemp.a = top.my - bottom.my;lTemp.b = bottom.mx- top.mx;lTemp.c = top.mx*bottom.my -
bottom.mx*top.my;return lTemp;}void LinecrossRectangel(Rectangel
rect,Line l0){VecPosition x1,x2,x3,x4;VecPosition cross1,cross2,cross3,cross4;Line l1,l2,l3,l4;x1.setpoint(rect.top.mx,rect.bottem.my);x2.setpoint(rect.bottem.mx,rect.top.my);x3=rect.top;x4=rect.bottem;l1=getLine(x4,x2);l2=getLine(x4,x1);l3=getLine(x2,x3);l4=getLine(x1,x3);cross1 = LinecrossLine(l1,l0);cross2 = LinecrossLine(l2,l0);cross3 = LinecrossLine(l3,l0);cross4 = LinecrossLine(l4,l0);int flag=0;if(cross1.mx>=rect.bottem.mx&&cross1.mx<=rect.top.mx&&cross1.my>=rect.bottem.my&&cross1.my<=rect.top.my){flag=1;cout<<"交点,("<<cross1.mx<<","<<cross1.my<<")"<<endl;}if(cross2.mx>=rect.bottem.mx&&cross2.mx<=rect.top.mx&&cross2.my>=rect.bottem.my&&cross2.my<=rect.top.my){flag=1;cout<<"交点,("<<cross2.mx<<","<<cross2.my<<")"<<endl;}if(cross3.mx>=rect.bottem.mx&&cross3.mx<=rect.top.mx&&cross3.my>=rect.bottem.my&&cross3.my<=rect.top.my){flag=1;cout<<"交点,("<<cross3.mx<<","<<cross3.my<<")"<<endl;}if(cross4.mx>=rect.bottem.mx&&cross4.mx<=rect.top.mx&&cross4.my>=rect.bottem.my&&cross4.my<=rect.top.my){flag=1;cout<<"交点,("<<cross4.mx<<","<<cross4.my<<")"<<endl;}if(flag==0){cout<<"直线与矩形没有交点"<<endl;}}int main(){int position;double a,b,c;Line l1;Line l2;double R;double cx,cy;Circle c1;VecPosition center;VecPosition top,bottom;Rectangel rect;cout<<"直线与直线的交点"<<endl;cout<<"直线与圆的交点"<<endl;cout<<"直线与矩形的交点"<<endl;cout<<"请输入请求:"<<endl;cin>>position;switch(position){case 1:VecPosition cross;cout<<"请输入第一条线的a,b,c"<<endl;cin>>a>>b>>c;l1.setLine(a,b,c);cout<<"请输入第二条线的a,b,c"<<endl;cin>>a>>b>>c;l2.setLine(a,b,c);cross=LinecrossLine(l1,l2);cout<<"交点:x="<<cross.mx<<",y="<<cross.my;break;case 2:cout<<"请输入直线的a,b,c"<<endl;cin>>a>>b>>c;l1.setLine(a,b,c);cout<<"请分别输入圆心的坐标,圆的半径想x,y,R"<<endl;cin>>cx>>cy>>R;center.mx=cx;center.my=cy;c1.setcircle(center,R);LinecrossCircle(l1,c1);break;case
3:cout<<"请输入直线的a,b,c"<<endl;cin>>a>>b>>c;l1.setLine(a,b,c);cout<<"请输入矩形右上角顶点的坐标"<<endl;cin>>top.mx>>top.my;cout<<"请输入矩形左下角顶点的坐标"<<endl;cin>>bottom.mx>>bottom.my;rect.setRectangel(top,bottom);LinecrossRectangel(rect,l1);break;}}

机器人技术第三次作业:用面向对象的思维设计相关类,从而实现直线与直线、直线与圆、直线与矩形的交点。相关推荐

  1. 合肥工业大学机器人技术期末_机器人技术第三次作业(HFUT)

    第三次作业 本人代码水平十分有限,仅供参考,有错误请指出 java源码: package robathomework3; import java.lang.Math; //点类 class point ...

  2. 编写程序描述卡车信息 某公司要开发“X出租公司车辆管理系统”,请用面向对象的思想设计卡车类。

    一.练习题目 编写程序描述卡车信息 二.问题描述 某公司要开发"X出租公司车辆管理系统",请用面向对象的思想设计卡车类. 设定: 属性:车牌号.车型.颜色.日租金.载重量 方法:租 ...

  3. 江南大学数字媒体技术大三上作业整理——顾清宇

    文章目录 前言 数字音视频技术 人工智能 互动媒体技术 游戏程序设计 数字图像处理技术 人机交互技术 智能算法专题设计 前言 大三上圆满结束了,想到自己每次做作业都是自己从零开始,还挺痛苦的,所以想着 ...

  4. 合工大机器人技术第四次作业

    仿真 足球机器人 第四次作业 决策树 该实例中总共有12个对象,6个类为"是",6个类为"否" I(p,n)=-(6/12)log2(6/12)-(6/12)l ...

  5. RxJava 沉思录(二),移动智能终端开发技术第三次作业

    .subscribe(photos -> { adapter.setData(photos); adapter.notifyDataSetChanged(); }); 现在新加一个需求,请求当前 ...

  6. 第三次作业-介绍一款原型设计工具

    课程:软件工程综合实践专题  学号:1759214 介绍一款原型设计工具:Mockplus http://www.mockplus.cn 如今是一个快节奏的社会,每一天都会有无数的软件发布,每一款软件 ...

  7. 《WAP》团队第三次作业--团队项目的原型设计与开发

    一· 目 录 第一部分 · 结 对 成 员 明 细 第二部分 · NABCD 模 型 第三部分 · 原 型 设 计 第四部分 · P S P  第五部分 · 结 对 过 程 第六部分 · 心 得 总 ...

  8. 合肥工业大学机器人技术期末_合肥工业大学 机器人技术 作业和实验

    简介 你好! 在这篇文章中,我将免费共享合肥工业大学<机器人技术>作业和实验环节的代码和个人报告,以供交流学习.为了方便更多的同学搜索到这篇博客,我会在下面贴出一部分实验题目. 共享资源包 ...

  9. 合工大php期末试卷_完美起航-合肥工业大学机器人技术作业和实验

    简介 你好! 在这篇文章中,我将免费共享合肥工业大学<机器人技术>作业和实验环节的代码和个人报告,以供交流学习.为了方便更多的同学搜索到这篇博客,我会在下面贴出一部分实验题目. 共享资源包 ...

最新文章

  1. python box2d_win10+Anaconda3成功使用pip安装Box2d
  2. 要速度更要方便!20款实用Chrome插件推荐
  3. 全国计算机等级考试题库二级C操作题100套(第50套)
  4. 第二十二期:动画讲解TCP,再不懂请来打我
  5. 为什么程序员要尽量少写代码
  6. 链接聚合是将一组物理接口_如何增加带宽,提升网络可靠性?
  7. QEBA:基于类边界查询访问的黑盒攻击
  8. 最大连续区间和的算法总结(转)
  9. 不狂热不忧虑:观看波士顿动力机器人视频的正确姿势
  10. CoffeeScript中的三元操作
  11. python中的递归函数如何表示_Python递归函数如何写?正确的Python递归函数用法!...
  12. Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item
  13. 用python画散点图
  14. 算法竞赛入门经典训练指南 pdf
  15. xshell修改字体大小
  16. 低代码发展趋势解读|低代码成为企业数字化转型“加速器”
  17. 平均值 几何平均数 算术平均数 调和平均数 平方平均数
  18. Android中监听电源键长按、Home键、Home键长按
  19. obs直播画面 清晰+流程 设置
  20. C语言自学路之计算平方(输入验证)

热门文章

  1. 安卓网页html/图片查看器开发——张泽华老师的些许错误
  2. Android 源码 图形系统之 relayoutWindow
  3. 抢救一台近乎报废的华为手机
  4. 男人需要尊重,女人需要爱
  5. 关于word删不掉的虚线横线
  6. 文本的上划线、删除线、下划线
  7. Matlab:涡旋光束与平面光波、球面光波干涉
  8. 走进嵌入式Linux的世界
  9. 1 计算机主机里面都有些什么东西,电脑主机内部硬件组成详解,一台完整主机内部大解密(高清图文)...
  10. 国内做SRM系统的公司哪家比较好?