C++面向对象思想 两条直线交点计算

我相信哪怕一点光,也能驱散学习中的迷雾,我在这分享一点自己的挫见

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQmFuVGFuZ2Vy,size_20,color_FFFFFF,t_70,g_se,x_16

 思路:

这题最大的难点就是abc三个常数要怎么去构造,这里需要数学公式去推导,虽然是初中水平,也能体现编程和数学密不可分了。因为我之后要涉及ai算法,需要线代和高数的知识去研究像傅里叶滤波算法,矩阵运算等等知识,所以苦逼的自学日子又要开始了。

整体思路就是构造点和线对象,线是由始点终点所构成,由两点可以得出一条线段。

直线方程:Ax+By+C = 0

只要能知道一条线段的abc参数,便可以计算两条线的交点。

公式推导:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQmFuVGFuZ2Vy,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQmFuVGFuZ2Vy,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQmFuVGFuZ2Vy,size_20,color_FFFFFF,t_70,g_se,x_16

详细代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;class Line;//Point类需要Line的类型,所以需要先申明。
class Point {
public:Point(double x = 0,double y = 0):x(x),y(y) {}Point(const Point& p) :x(p.x), y(p.y) {}~Point() {}	Point setPoint(Line& l1, Line& l2);
public:double x,y;
};
class Line :public Point{friend Point Point::setPoint(Line& l1, Line& l2);//通过命名空间来把函数从Point转到Line,之前函数未定义是因为没有放作用域分辨符
public:Line GetLine(Point Source, Point Destination);double LineA() { return a; }//三个参数的传参double LineB() { return b; }double LineC() { return c; }//由于不知道没有c时候的x,y对应方程只好把c写出来,void Show(Point p);
private:double a, b, c;
};
Point Point::setPoint(Line& l1, Line& l2) {//Point Point::setPoint,第一个Point是函数返回类型,第二个Point是函数的作用域。Point ptemp;double Equational;Equational = l1.LineA() * l2.LineB() - l2.LineA() * l1.LineB();//因为在类外不能访问私有成员,用函数接口调用私有成员。//Equational是方程式的意思,这里通过数学计算算出a,b,c常数关于x,y的关系。ptemp.x = (l1.LineB() * l2.LineC() - l2.LineB() * l1.LineC()) / Equational;ptemp.y = (l1.LineC() * l2.LineA() - l2.LineC() * l1.LineA()) / Equational;return ptemp;//把点对象返回。则返回ptemp.x和ptemp.y。
}
Line Line:: GetLine(Point Source, Point Destination) {//计算直线的方程,main函数里面给出始点和终点Line ltemp;//给一个Line对象,让这个对象的三个参数分别被给出的两点修饰。//数学推导a,b,c的方程。ltemp.a = Source.y - Destination.y;ltemp.b = Destination.x - Source.x;ltemp.c = Source.x*Destination.y - Destination.x*Source.y;return ltemp;
}
void Line::Show(Point p) {//点对象传参cout << "(" << p.x << "," << p.y << ")" << endl;
}
int main() {Line l;double x0, x1, x2, x3, y0, y1, y2, y3;while (1) {cout << "直线A的起点到终点:";cin >> x0 >> y0 >> x1 >> y1;cout << "直线B的起点到终点:";cin >> x2 >> y2 >> x3 >> y3;Line a = l.GetLine(Point(x0, y0), Point(x1, y1));Line b = l.GetLine(Point(x2, y2), Point(x3, y3));cout << "两直线交点坐标为:";l.Show(l.setPoint(a, b));}
}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8s 实践 | 如何解决多租户集群的安全隔离问题?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 匡大虎责编 | 阿秃导读&#xff1a;如何解决多租户集群的安全隔离问题是企业上云的一个关键问题&#xff0c;本文主要介绍 Kubernetes 多租户集群的基本概念和常见应用形态&#xff0c;以及在企业内部共享集群的业务场景下&a…

scara机器人dh参数表_两分钟带你了解机器人标定的因素

为什么机器人需要标定&#xff1f;影响机器人本体精度因素分为两大类&#xff1a;运动学因素——加工误差、机械公差/装配误差、减速器精度、减速器空程等&#xff1b;动力学因素——质量、惯性张量、摩擦力、关节柔性、连杆柔性。机器人本体的实际精度和理论设计模型可能会存在…

Git的3大区域

为什么使用git&#xff1f; 为了保存文件的每一个历史记录&#xff0c;以便查看每一个历史节点的文件变动情况和把错误的的历史节点回滚。 git分为3个区域&#xff0c;工作区、暂存区、版本库(本地)。 工作区包括git已经管理的文件区域和新增以及修改的文件区域 暂存区&#x…

多道批程序快速启动各种服务

之前每次开机都需要重新启动各种服务&#xff0c;太麻烦了&#xff0c;那么今天提供一种简单方式来快速的启动各种服务 视频讲解&#xff1a;简单代码让你快速启动各种服务 创建一个文件txt作为启动主程序 # 获取管理员权限 echo off&color 17 if exist "%SystemRoo…

python编辑学生分数_python处理excel(04)数据筛选和过滤

源数据&#xff0c;我们最终要找出年龄在18——30岁之间&#xff0c;分数大于85分的学生&#xff0c;为A类学生。在excel里可以使用筛选功能&#xff0c;先筛选age列&#xff0c;大于等于、小于。这两个条件限制。然后选score后边的小三角&#xff0c;条件为大于等于85.最终数据…

如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;“SaaS企业迎来了最好的时代。一方面&#xff0c;产业互联网大潮已至&#xff0c;中国企业降本增效的需求提升&#xff1b;另一方面&#xff0c;云计算…

Git 回滚

文章目录1. 简述2. 命令版本3. idea 图形化版本(场景1)4. idea 图形化版本(场景2)1. 简述 Git 回滚&#xff1a;常见的有2种场景&#xff0c;第一种是回滚到之前版本&#xff0c;第二种是回滚到之后的版本。 2. 命令版本 用到的命令&#xff1a; 场景1(回滚之前的版本)&…

python开两个守护线程_python 守护线程

守护线程 如果python线程是守护线程&#xff0c;那么以为着这个线程是“不重要”的&#xff0c;“不重要”意味着如果他的父进程结束了但该守护线程没有运行完&#xff0c;守护进程就会被强制结束。如果线程是非守护线程&#xff0c;那么父进程只有等到守护线程运行完毕后才能结…

Nutanix企业云助力嘉里大通提升核心竞争力

Nutanix&#xff08;纳斯达克代码&#xff1a;NTNX&#xff09;近日宣布&#xff0c;物流行业领导企业嘉里大通 (Kerry EAS) 已采用Nutanix超融合基础架构&#xff08;HCI&#xff09;和企业云解决方案&#xff0c;进行企业数据中心的现代化改造。 尽管面临全球贸易和区内经济…

SoapUI 测试http接口实战

文章目录1. New SOAP project2. New TestSuite3. New TestCase4. Add HTTP Request5. 配置请求参数信息6. 选择请求报文类型1. New SOAP project 1&#xff09;打开soapui–>右键Projects–>New SOAP project 2. New TestSuite 3. New TestCase 4. Add HTTP Request …

Git开发流程和工作流

开发流程&#xff1a; C2版本基于C1版本开发&#xff1b;C3版本基于C2版本开发&#xff1b; C4版本基于C3版本开发&#xff1b;C5版本基于C3版本开发&#xff1b; C6 是C4和C3合并后的版本 分支3个总览&#xff1a; 主分支、bug分支、新功能分支 Git修改变动分析&#xff1a;…

python计算长方体体积最简单代码_python处理DICOM并计算三维模型体积

python处理DICOM并计算三维模型体积来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2019年11月5日【下载文档: python处理DICOM并计算三维模型体积.txt 】(友情提示:右键点上行txt文档名->目标另存为)python处理DICOM并计算三维模型体积在已知DICO…

AI 安全在阿里业务中的实践,你了解吗?

我们知道&#xff0c;AI 技术将在很长一段时间占据互联网技术时代的风口。但是&#xff0c;有代码的地方就有缺陷&#xff0c;提到技术很难不讲安全&#xff0c;那么AI会不会碰到安全问题呢&#xff1f; AI安全 试想一下&#xff0c;未来的某个早晨&#xff0c;当你像往常一样…

vue ref和reactive的区别

ref 函数传入一个值作为参数,返回基于该参数的响应式ref对象 ref 接受参数&#xff0c;并将其包裹在一个带有 value property 的对象中返回&#xff0c;然后可以使用该 property 访问或更改响应式变量的值 将值封装在一个对象中&#xff0c;看似没有必要&#xff0c;但为了保…

解决idea修改html、js、css后,浏览器不能同步加载

重装了IDEA后&#xff0c;忽略了一些设置&#xff0c;导致在开发springboot项目时&#xff0c;启动了项目&#xff0c;修改了前端文件&#xff0c;但是浏览器中并不能实时加载修改的内容。 主要是IDEA的2个地方需要设置&#xff1a; 一、修改file-settings 二、在IDEA中&…

安全多方计算新突破!阿里首次实现“公开可验证” 的安全方案

阿里妹导读&#xff1a;近日&#xff0c;阿里安全双子座实验室与马里兰大学等高校合作的论文《Covert Security with Public Verifiability: Faster, Leaner, and Simpler 》【1】被欧洲密码年会(Eurocrypt)2019接收。这是国内公司在安全多方计算领域的第一篇顶会论文&#xff…

996!007!同是敲了2万行代码,为什么他却晋升了?

正在敲代码的你 &#xff0c;春节假期即将来临&#xff0c;复盘这1年&#xff0c;你印象最深刻的一件事是什么&#xff1f;有人在群里回答了一条扎心的答案&#xff1a;忙碌1年&#xff0c;每天996&#xff0c;回首2019除了加班再无成长可说。你以为只要把事情搞定了&#xff0…

iqooneo系统要不要更新_IQOOZ1即将发布,和IQOOneo3、OPPORenoACE对比,谁更值得入手?...

高刷屏和手机使用时长本质上并没有什么关系&#xff0c;但是购买高刷屏的手机却可以让你得到更好的体验&#xff0c;而且高刷屏绝对是未来手机行业发展的一个主流方向&#xff0c;所以说目前如果有新机购买的计划的话&#xff0c;配备高刷屏的手机是一个很好的选择。不过数码君…

分布式系统:一致性模型

分布式系统中一个重要的问题就是数据复制&#xff0c;数据复制一般是为了增强系统的可用性或提高性能。而实现数据复制的一个主要难题就是保持各个副本的一致性。本文首先讨论数据复制的场景中一致性模型如此重要的原因&#xff0c;然后讨论一致性模型的含义&#xff0c;最后分…