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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【2012百度之星 / 资格赛】I:地图的省钱计划

發布時間:2024/7/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【2012百度之星 / 资格赛】I:地图的省钱计划 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
描述

百度地圖有自己的一套坐標系(你可以把它看作一個笛卡爾坐標系),在這套坐標系里,一個標準單位為1km。而在這坐標系上針對地理信息進行標注的數據,大多數時候是通過購買的方式完成的。為了節約數據更新的成本,數據組里的鑫哥想出了一個好主意——自己測數據。
鑫哥按照他的預想開始實驗;在每組試驗中,鑫哥選取了三個已經被準確標注在百度地圖的坐標系里的移動運營商的基站作為信號接收點(這里可以準確的得到信號的接收時間信息)。當信號接收點附近的用戶手機簽到時,三個信號接收點就會先后接收到這個信號,并可以準確的知曉接收到信號的時間(將第一個信號點接收到信號的時間記為0秒時刻)。由此,我們就可以確定用戶手機簽到的位置的在地圖的準確坐標了。
現在已知以下數據:
1.三個信號接收點在百度地圖坐標系中的具體坐標(x1,y1), (x2,y2), (x3,y3);
2.三個信號點得到用戶發出的信號的時間t1, t2, t3(t1, t2, t3 ≥ 0),單位s; t1, t2, t3至少有一個數為0;
3.信號的轉播速度C,單位m/s;
請幫助鑫哥寫個程序,計算下用戶發出信號的位置在百度地圖坐標系內的坐標(這個點是唯一的)。

輸入
輸入包含多組數據,每組數據格式如下:
C
x1 y1 x2 y2 x3 y3
t1 t2 t3
最后一組數據為0,表示輸入結束。
輸出
針對每組測試數據,請先輸出這個組的編號(第n組就是輸出“Case n:”);然后換行輸出信號發出點的坐標(x,y) 。x,y應該由空格分隔,并被舍入到小數點后第六位。
樣例輸入
1000 0 1 1 1 2 1 0 0.6 1.6 1000 0 0 0 1 1 0 0.4142135 0 0 1000 0 0 1 0 2 1 0 0.414213562373 1 1000 0 0 0 -1 0 1 0 0 1 1000 0 0 0 1 0 -1 0 1 0 1000 0 0 1 0 -1 0 0 1 0 1000 0 0 -1 0 1 0 0 0 1 100 0 0 0 1 1 0 0 10 10 0
樣例輸出
Case 1: 0.200000 1.000000 Case 2: 1.000000 1.000000 Case 3: 0.000000 1.000000 Case 4: 0.000000 -0.500000 Case 5: 0.000000 -0.500000 Case 6: -0.500000 0.000000 Case 7: -0.500000 0.000000 Case 8: 0.000000 0.000000

主要思路:這個題用三角函數來解方程會很方便的,通過將兩個方程轉化為一個三角函數方程,然后求角度cita和半徑r就可以了(特別說明:最后那個分式中的分母部分中的l2、l3是沒有平方的)。

實現代碼:

#include<iostream> #include<cstdio> #include<cmath> using namespace std; double x[4], y[4], t[4];void solve(int i , int j , int k) {double x2, y2, x3, y3, l2, l3 , sum , fai , cita , r , m , n;?? //citax2 = x[j] -x[i] , y2 = y[j] -y[i];x3 = x[k] -x[i] , y3 = y[k] -y[i];l2 = t[j] -t[i] , l3 = t[k] -t[i];m = x2*x2 + y2*y2 - l2*l2 , n = x3*x3 + y3*y3 - l3*l3;// 得到方程 a*sin(cita) + b*cos(cita) = -cdouble a = m*y3-n*y2 ;?? //sin(cita)的系數double b = m*x3-n*x2 ;?? //cos(cita)的系數double c = m * l3 - n * l2;// 得到方程 sin(cita+fai) = -c/(sqrt(a*a+b*b))fai = atan2(b, a) ;???? //先求出角度faisum = asin(- c/sqrt(a*a+b*b+1e-15));??? //通過反正弦函數求出cita+fai的角度和cita = sum - fai;????? // 此時cita是一個銳角if (abs(m)>abs(n))r = m/(l2 + x2 *cos(cita) + y2 * sin(cita))/2;elser = n/(l3 + x3 *cos(cita) + y3 * sin(cita))/2;if(r < 0){sum = - sum + 3.141592653579;??? //r<0,說明不能是銳角,應該是個鈍角cita = sum - fai;if (abs(m)>abs(n))r = m/(l2 + x2 *cos(cita) + y2 * sin(cita))/2;elser = n/(l3 + x3 *cos(cita) + y3 * sin(cita))/2;}printf("%.6f %.6f\n", r * cos(cita) + x[i], r * sin(cita) + y[i]); } int main(void) {int num = 1;double c;while(scanf("%lf", &c)!=EOF){c/=1000;if (abs(c) < 1e-6)break;scanf("%lf %lf %lf %lf %lf %lf", x, y, x+1, y+1, x+2, y+2);scanf("%lf %lf %lf", t, t+1, t+2);printf("Case %d:\n", num++);t[0] *= c;t[1] *= c;t[2] *= c;solve(0, 1, 2);}return 0; }


總結

以上是生活随笔為你收集整理的【2012百度之星 / 资格赛】I:地图的省钱计划的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。