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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Chino with Geometry(数学,计算几何,记录一下推导证明)

發布時間:2024/9/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chino with Geometry(数学,计算几何,记录一下推导证明) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:https://ac.nowcoder.com/acm/problem/23871
來源:牛客網

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Chino的數學很差,因此Cocoa非常擔心。這一天,Cocoa準備教Chino學習圓與直線的位置關系。
眾所周知,直線和圓有三種位置關系:相離、相切、相割,主要根據圓心到直線的距離來判定。

現在我們來看看作業吧:


示例1
輸入
復制

2 2 1 3 1 2

輸出
復制

1

證明:|BD| x |BE| = |AB| ^ 2 - |AE| ^ 2 (‘ ^ 2 ’這里代表平方)
解:
證明:
如下圖所示,過A點作直線CB的垂線,交點為O,連接AO,AE,AB

由勾股定理得:
AE ^ 2 = EO ^ 2 + AO ^ 2
AB ^ 2 = BO ^ 2 + AO ^ 2
所以:
AE ^ 2 - EO ^ 2 = AB ^ 2 - BO ^ 2
因為:
BO = BD + DO
DO = EO
所以:
BO = BD + EO
AE ^ 2 - EO ^ 2 = AB ^ 2 - ( BD + EO) ^ 2
AE ^ 2 - EO ^ 2 = AB ^ 2 - BD ^ 2 -2BD x EO - EO ^ 2
AE ^ 2 = AB ^ 2 - BD ^ 2 - 2BD x EO
又因為:
EO = (1/2)DE
DE = BE - BD
所以:
AE ^ 2 = AB ^ 2 - BD ^ 2 - 2BD x(1/2)x( BE - BD)
AE ^ 2 = AB ^ 2 - BD x BE
所以:|BD| x |BE| = |AB| ^ 2 - |AE| ^ 2

AC_code:
way1:
根據上述證明:

#include <bits/stdc++.h> using namespace std; int main() {double x0,y0,r,x1,y1,y2;cin>>x0>>y0>>r>>x1>>y1>>y2;double ans = pow(y1-y0,2) + pow(x1-x0,2) - pow(r,2);cout.precision(0);cout<<fixed<<ans<<endl;return 0; }

way2:
直接算出D,E兩點坐標
圓方程:(x-a) ^ 2 + (y - b) ^ 2 = r ^ 2
直線方程: y = kx + b

#include <bits/stdc++.h> using namespace std; int main() {double x0,y0,r,x1,y1,y2;cin>>x0>>y0>>r>>x1>>y1>>y2;double k = (y1-y2)/x1;double a = pow(k,2) + 1.0;double b = 2*(-x0+k*(y2-y0));double c = pow(x0,2)+pow(y2-y0,2)-pow(r,2);double tmp = pow(b,2)-4*a*c;double t = sqrt(tmp);//cout<<k<<" "<<a<<" "<<b<<" "<<c<<" "<<tmp<<" "<<t<<endl;double aim_x1 = (-b-t)/(2*a);double aim_x2 = (-b+t)/(2*a);double aim_y1 = k*aim_x1 + y2;double aim_y2 = k*aim_x2 + y2;//cout<<aim_x1<<" "<<aim_y1<<" "<<aim_x2<<" "<<aim_y2<<endl;double BD = sqrt(pow(aim_y2-y1,2)+pow(aim_x2-x1,2));double BE = sqrt(pow(aim_y1-y1,2)+pow(aim_x1-x1,2));double ans = BD*BE;//cout<<BD<<" "<<BE<<endl;cout.precision(0);cout<<fixed<<ans<<endl;return 0; }

總結

以上是生活随笔為你收集整理的Chino with Geometry(数学,计算几何,记录一下推导证明)的全部內容,希望文章能夠幫你解決所遇到的問題。

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