日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

转 已知两点坐标和半径求圆心坐标程序C++

發(fā)布時(shí)間:2024/4/14 c/c++ 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转 已知两点坐标和半径求圆心坐标程序C++ 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)學(xué)思想:利用圓方程和直線方程 已知兩點(diǎn)坐標(biāo)和半徑求圓心坐標(biāo)程序 #include <iostream> #include <fstream> #include <cmath>using namespace std;ofstream fout;typedef struct {double x;double y; }Point;double Y_Coordinates(double x,double y,double k,double x0);//4個(gè)參數(shù) void Circle_Center(Point p1,Point p2,double dRadius); bool Data_Validation(Point p1,Point p2,double dRadius); void ReadData(Point &p1,Point &p2,double &dRadius);void main() {Point p1,p2;double dRadius = 0.0;ReadData(p1,p2,dRadius);fout.open("Result.txt");Circle_Center(p1,p2,dRadius);fout.close(); }void Circle_Center(Point p1,Point p2,double dRadius) {double k = 0.0,k_verticle = 0.0;double mid_x = 0.0,mid_y = 0.0;double a = 1.0;double b = 1.0;double c = 1.0;Point center1,center2;k = (p2.y - p1.y) / (p2.x - p1.x);if(k == 0){center1.x = (p1.x + p2.x) / 2.0;center2.x = (p1.x + p2.x) / 2.0;center1.y = p1.y + sqrt(dRadius * dRadius -(p1.x - p2.x) * (p1.x - p2.x) / 4.0);center2.y = p2.y - sqrt(dRadius * dRadius -(p1.x - p2.x) * (p1.x - p2.x) / 4.0);}else{k_verticle = -1.0 / k;mid_x = (p1.x + p2.x) / 2.0;mid_y = (p1.y + p2.y) / 2.0;a = 1.0 + k_verticle * k_verticle;b = -2 * mid_x - k_verticle * k_verticle * (p1.x + p2.x);c = mid_x * mid_x + k_verticle * k_verticle * (p1.x + p2.x) * (p1.x + p2.x) / 4.0 - (dRadius * dRadius - ((mid_x - p1.x) * (mid_x - p1.x) + (mid_y - p1.y) * (mid_y - p1.y)));center1.x = (-1.0 * b + sqrt(b * b -4 * a * c)) / (2 * a);center2.x = (-1.0 * b - sqrt(b * b -4 * a * c)) / (2 * a);center1.y = Y_Coordinates(mid_x,mid_y,k_verticle,center1.x);center2.y = Y_Coordinates(mid_x,mid_y,k_verticle,center2.x);}fout << center1.x << " " << center1.y << endl;fout << center2.x << " " << center2.y << endl; }double Y_Coordinates(double x,double y,double k,double x0) {return k * x0 - k * x + y; }bool Data_Validation(Point p1,Point p2,double dRadius) {double dDistance = 0.0;dDistance = sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));if(dDistance == 0.0){cout << "\n輸入了相同的點(diǎn)!\n";return false;}if((2 * dRadius) >= dDistance)return true;else{cout << "\n兩點(diǎn)間距離大于直徑!\n";return false;} }void ReadData(Point &p1,Point &p2,double &dRadius) {cout << "請(qǐng)輸入圓周上一點(diǎn)的坐標(biāo):";cin >> p1.x >> p1.y;cout << "請(qǐng)輸入圓周上另一點(diǎn)的坐標(biāo):";cin >> p2.x >> p2.y;cout << "請(qǐng)輸入圓的半徑:";cin >> dRadius;if(! Data_Validation(p1,p2,dRadius)){cout << endl << "數(shù)據(jù)不合理!\n";exit(0);} } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/lhuan/p/5753847.html

總結(jié)

以上是生活随笔為你收集整理的转 已知两点坐标和半径求圆心坐标程序C++的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。