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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

信息学奥赛一本通 1034:计算三角形面积 | OpenJudge NOI 1.3 17

發(fā)布時間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1034:计算三角形面积 | OpenJudge NOI 1.3 17 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【題目鏈接】

ybt 1034:計算三角形面積
OpenJudge NOI 1.3 17:計算三角形面積

【題目考點】

1. 已知三點求三角形面積公式

已知三點分別為(x1,y1),(x2,y2),(x3,y3)(x_1,y_1), (x_2,y_2), (x_3,y_3)(x1?,y1?),(x2?,y2?),(x3?,y3?)
先給出結(jié)論:這三個點圍成的三角形的面積為:
S=12∣x1y2+x2y3+x3y1?x1y3?x2y1?x3y2∣S=\frac{1}{2}|x_1y_2+x_2y_3+x_3y_1-x_1y_3-x_2y_1-x_3y_2|S=21?x1?y2?+x2?y3?+x3?y1??x1?y3??x2?y1??x3?y2?

推導過程:
  • a?=(x2?x1,y2?y1),b?=(x3?x1,y3?y1)\vec{a} = (x_2-x_1,y_2-y_1), \vec{b} = (x_3-x_1,y_3-y_1)a=(x2??x1?,y2??y1?),b=(x3??x1?,y3??y1?)
  • 已知向量點積公式a??b?=∣a?∣∣b?∣cosθ\vec{a} \cdot \vec{b} = |\vec{a}||\vec{b}|cos\thetaa?b=abcosθ,其中θ\thetaθ是向量a?,b?\vec{a}, \vec{b}a,b的夾角。
    cosθ=a??b?∣a?∣∣b?∣cos\theta = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|}cosθ=aba?b?
  • 已知sin2θ+cos2θ=1sin^2\theta + cos^2\theta = 1sin2θ+cos2θ=1,且θ<π\(zhòng)theta<\piθ<π
    sinθ=1?cons2θ=(∣a?∣∣b?∣)2?(a??b?)2∣a?∣∣b?∣sin\theta = \sqrt{1-cons^2\theta} = \frac{\sqrt{(|\vec{a}||\vec{b}|)^2 - (\vec{a} \cdot \vec{b})^2}}{|\vec{a}||\vec{b}|}sinθ=1?cons2θ?=ab(ab)2?(a?b)2??
  • 已知三角形面積公式:S=12∣a?∣∣b?∣sinθS = \frac{1}{2}|\vec{a}||\vec{b}|sin\thetaS=21?absinθ
    S=12∣a?∣∣b?∣(∣a?∣∣b?∣)2?(a??b?)2∣a?∣∣b?∣=12(∣a?∣∣b?∣)2?(a??b?)2\begin{aligned} S &= \frac{1}{2}|\vec{a}||\vec{b}|\frac{\sqrt{(|\vec{a}||\vec{b}|)^2 - (\vec{a} \cdot \vec{b})^2}}{|\vec{a}||\vec{b}|}\\ &= \frac{1}{2}\sqrt{(|\vec{a}||\vec{b}|)^2 - (\vec{a} \cdot \vec{b})^2}\\ \end{aligned} S?=21?abab(ab)2?(a?b)2??=21?(ab)2?(a?b)2??
  • ∣a?∣=(x2?x1)2+(y2?y1)2|\vec{a}| = \sqrt{(x_2-x_1)^2+(y_2-y_1)^2}a=(x2??x1?)2+(y2??y1?)2?
    ∣b?∣=(x3?x1)2+(y3?y1)2|\vec{b}| = \sqrt{(x_3-x_1)^2+(y_3-y_1)^2}b=(x3??x1?)2+(y3??y1?)2?
    a??b?=(x2?x1)(x3?x1)+(y2?y1)(y3?y1)\vec{a} \cdot \vec{b} = (x_2-x_1)(x_3-x_1)+(y_2-y_1)(y_3-y_1)a?b=(x2??x1?)(x3??x1?)+(y2??y1?)(y3??y1?)
  • 根據(jù)以上公式:S=12(∣a?∣∣b?∣)2?(a??b?)2S = \frac{1}{2}\sqrt{(|\vec{a}||\vec{b}|)^2 - (\vec{a} \cdot \vec{b})^2}S=21?(ab)2?(a?b)2?
    已經(jīng)可以做到輸入x1,y1,x2,y2,x3,y3x_1,y_1, x_2,y_2, x_3,y_3x1?,y1?,x2?,y2?,x3?,y3?,求S。
    繼續(xù)化歸,可以得到公式
    S=12∣x1y2+x2y3+x3y1?x1y3?x2y1?x3y2∣S=\frac{1}{2}|x_1y_2+x_2y_3+x_3y_1-x_1y_3-x_2y_1-x_3y_2|S=21?x1?y2?+x2?y3?+x3?y1??x1?y3??x2?y1??x3?y2?

2. 海倫公式:已知三條邊的長度求三角形面積

a=∣a?∣,b=∣b?∣,c=∣c?∣a = |\vec{a}|, b = |\vec{b}|, c = |\vec{c}|a=a,b=b,c=c
已知a?=(x2?x1,y2?y1),b?=(x3?x1,y3?y1),c?=(x3?x2,y3?y2)\vec{a} = (x_2-x_1,y_2-y_1), \vec{b} = (x_3-x_1,y_3-y_1), \vec{c} = (x_3-x_2,y_3-y_2)a=(x2??x1?,y2??y1?),b=(x3??x1?,y3??y1?),c=(x3??x2?,y3??y2?)
有:

  • a=∣a?∣=(x2?x1)2+(y2?y1)2a = |\vec{a}| = \sqrt{(x_2-x_1)^2+(y_2-y_1)^2}a=a=(x2??x1?)2+(y2??y1?)2?
    b=∣b?∣=(x3?x1)2+(y3?y1)2b = |\vec{b}| = \sqrt{(x_3-x_1)^2+(y_3-y_1)^2}b=b=(x3??x1?)2+(y3??y1?)2?
    c=∣c?∣=(x3?x2)2+(y3?y2)2c = |\vec{c}| = \sqrt{(x_3-x_2)^2+(y_3-y_2)^2}c=c=(x3??x2?)2+(y3??y2?)2?
  • 半周長p=12(a+b+c)p = \frac{1}{2}(a+b+c)p=21?(a+b+c)
  • 海倫公式,三角形面積S=p(p?a)(p?b)(p?c)S = \sqrt{p(p-a)(p-b)(p-c)}S=p(p?a)(p?b)(p?c)?

3. 求一個數(shù)的絕對值

  • 求整數(shù)的絕對值:int abs(int a);
  • 求浮點型數(shù)的絕對值:double fabs(double a);

【題解代碼】

解法1:用公式S=12(∣a?∣∣b?∣)2?(a??b?)2S = \frac{1}{2}\sqrt{(|\vec{a}||\vec{b}|)^2 - (\vec{a} \cdot \vec{b})^2}S=21?(ab)2?(a?b)2?

#include <bits/stdc++.h> using namespace std; int main() {double x1,y1,x2,y2,x3,y3,a_m,b_m,adotb,res;cin>>x1>>y1>>x2>>y2>>x3>>y3;a_m = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));//|a|b_m = sqrt((x3-x1)*(x3-x1) + (y3-y1)*(y3-y1));//|b|adotb = (x2-x1)*(x3-x1)+(y2-y1)*(y3-y1);//a點乘b res = 0.5 * sqrt(a_m*b_m*a_m*b_m-adotb*adotb);//結(jié)果 cout<<fixed<<setprecision(2)<<res<<endl;return 0; }

解法2:用公式S=12∣x1y2+x2y3+x3y1?x1y3?x2y1?x3y2∣S=\frac{1}{2}|x_1y_2+x_2y_3+x_3y_1-x_1y_3-x_2y_1-x_3y_2|S=21?x1?y2?+x2?y3?+x3?y1??x1?y3??x2?y1??x3?y2?

#include <bits/stdc++.h> using namespace std; int main() {double x1,y1,x2,y2,x3,y3;cin>>x1>>y1>>x2>>y2>>x3>>y3;cout<<fixed<<setprecision(2)<<fabs((x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2))/2;return 0; }

解法3:用海倫公式S=p(p?a)(p?b)(p?c)S = \sqrt{p(p-a)(p-b)(p-c)}S=p(p?a)(p?b)(p?c)?

#include <bits/stdc++.h> using namespace std; int main() {double x1,y1,x2,y2,x3,y3,a,b,c,p;cin>>x1>>y1>>x2>>y2>>x3>>y3;a = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));//|a|b = sqrt((x3-x1)*(x3-x1) + (y3-y1)*(y3-y1));//|b|c = sqrt((x3-x2)*(x3-x2) + (y3-y2)*(y3-y2));//|c|p = (a + b + c)/2;//p半周長 cout<<fixed<<setprecision(2)<<sqrt(p*(p-a)*(p-b)*(p-c))<<endl;return 0; }

總結(jié)

以上是生活随笔為你收集整理的信息学奥赛一本通 1034:计算三角形面积 | OpenJudge NOI 1.3 17的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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