求两条直线的交点,运用面向对象的思想编程实现C++源码
来源:互联网 发布:淘宝店运营视频教程 编辑:程序博客网 时间:2024/05/01 18:15
一般方程法:
直线的一般方程为F(x) = ax + by + c = 0。既然我们已经知道直线的两个点,假设为(x0,y0), (x1, y1),那么可以得到a = y0 – y1, b = x1 – x0, c = x0y1 – x1y0。
因此我们可以将两条直线分别表示为
F0(x) = a0*x + b0*y + c0 = 0, F1(x) = a1*x + b1*y + c1 = 0
那么两条直线的交点应该满足
a0*x + b0*y +c0 = a1*x + b1*y + c1
由此可推出
x = (b0*c1 – b1*c0)/D
y = (a1*c0 – a0*c1)/D
D = a0*b1 – a1*b0, (D为0时,表示两直线平行)
二者实际上就是连立方程组F0(x) = a0*x + b0*y + c0 = 0, F1(x) = a1*x + b1*y + c1 = 0的叉积应用
i j k
a0 b0 c0
a1 b1 c1
此方法摘自 http://blog.csdn.net/abcjennifer/article/details/7584628,本人亲自推演过。
#include<iostream>#include<iomanip>using namespace std;#define N 6class Point{public:double m_pointX;double m_pointY;public:Point(){}Point(double x, double y){m_pointX = x; m_pointY = y;}};class Line:public Point{public:double a;double b;double c;public:Line GetLine(Point ptSource, Point ptDestination);Point GetCrossPoint(Line l1, Line l2);void CrossPointShow(Point ptCross);};Line Line::GetLine(Point ptSource, Point ptDestination){Line lTemp;lTemp.a = ptSource.m_pointY - ptDestination.m_pointY; lTemp.b = ptDestination.m_pointX - ptSource.m_pointX; lTemp.c = ptSource.m_pointX*ptDestination.m_pointY - ptDestination.m_pointX*ptSource.m_pointY;return lTemp;}Point Line::GetCrossPoint(Line l1, Line l2){Point pTemp;double D; D = l1.a*l2.b - l2.a*l1.b; Point p; pTemp.m_pointX = (l1.b*l2.c - l2.b*l1.c)/D; pTemp.m_pointY = (l1.c*l2.a - l2.c*l1.a)/D; return pTemp;}void Line::CrossPointShow(Point ptCross){cout<<"两条直线交点的横坐标:"<<setprecision(N)<<ptCross.m_pointX<<endl;cout<<"两条直线交点的纵坐标:"<<setprecision(N)<<ptCross.m_pointY<<endl;}void main(){Line l;double x0, x1, x2, x3, y0, y1, y2, y3;char c0, c1, d0;while (1){cout<<"请输入一条直线的两点坐标:"<<endl;cin>>c0>>x0>>d0>>y0>>c1>>c0>>x1>>d0>>y1>>c1;cout<<"请输入另一条直线的两点坐标:"<<endl;cin>>c0>>x2>>d0>>y2>>c1>>c0>>x3>>d0>>y3>>c1;l.CrossPointShow(l.GetCrossPoint(l.GetLine(Point(x0, y0), Point(x1, y1)), l.GetLine(Point(x2, y2), Point(x3, y3))));}}
0 0
- 求两条直线的交点,运用面向对象的思想编程实现C++源码
- C语言实现面向对象的思想
- 面向对象的编程思想
- 面向对象的编程思想
- 面向对象的编程思想
- 面向对象的编程思想
- 面向对象的编程思想
- 面向对象的编程思想
- c++求两条直线的交点
- 学习心得:在c 中用面向对象的思想编程
- C++ 实现已知直线上两个点求解直线方程,并求两条直线的交点
- 使用面向对象的编程思想实现js代码
- 灵活运用面向对象的思想在BCB5中进行高效编程
- 面向对象的编程思想在javascript中的运用(上)
- 面向对象的编程思想在javascript中的运用(上)
- java运用面向对象的思想实现计算器的小程序
- 直线的交点公式
- 直线的交点
- hdu4584(Building bridges)-简单题
- stm32 位带操作
- Rage(PC) Modding Notes
- How Many Paths Are There
- hdu 4939 Stupid Tower Defense 2014多校七 DP
- 求两条直线的交点,运用面向对象的思想编程实现C++源码
- 参照openRTSP写的一个RTSP client 加了一些注解
- maven的distributionManagement
- Populating Next Right Pointers in Each Node II leetcode
- webview使用详解
- 随笔
- const int *p和int * const p的区别(常量指针与指向常量的指针)
- HDOJ题目2502月之数(数学,递推)
- Oracle体系结构