C++面向对象思想 两条直线交点计算
生活随笔
收集整理的這篇文章主要介紹了
C++面向对象思想 两条直线交点计算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我相信哪怕一點光,也能驅散學習中的迷霧,我在這分享一點自己的挫見
?思路:
這題最大的難點就是abc三個常數要怎么去構造,這里需要數學公式去推導,雖然是初中水平,也能體現編程和數學密不可分了。因為我之后要涉及ai算法,需要線代和高數的知識去研究像傅里葉濾波算法,矩陣運算等等知識,所以苦逼的自學日子又要開始了。
整體思路就是構造點和線對象,線是由始點終點所構成,由兩點可以得出一條線段。
直線方程:Ax+By+C = 0
只要能知道一條線段的abc參數,便可以計算兩條線的交點。
公式推導:
?
?
詳細代碼
#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));} }總結
以上是生活随笔為你收集整理的C++面向对象思想 两条直线交点计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pythonrgb高精度浮点运算类型_p
- 下一篇: fiq中断的入口地址_嵌入式技巧:ARM