题目题意:
输入两个点A、B的坐标,然后在x坐标轴上找一个点 C,能够满足这个三角形的面积为2。
题目知识点:
计算几何
题目分析:
计算坐标系上三角形的面积,常用的方法为叉乘法。
设 A(xₐ,yₐ)、B(xᵦ,yᵦ)、C(x,0),则:面积 S= 1/2 * |(xᵦ - xₐ)(0 - yₐ) - (yᵦ - yₐ)(x - xₐ)| = 2化简后得到:|(xᵦ - xₐ)(-yₐ) - (yᵦ - yₐ)(x - xₐ)| = 4进一步整理为:| (yₐ - yᵦ) x + (xᵦyₐ - xₐyᵦ) | = 4
那么,此时我们就可以设常数c = xᵦyₐ - xₐyᵦ,k = yₐ - yᵦ,这样就可以分类讨论,当k趋近于0的时候,我们就可以直接去判断常数c-4的绝对值是否趋近于0,如果k不趋近于0,那么就可以直接计算结果(4.0-c)/k,注意精度
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct point{
double x,y;
};
void solve(){
point a,b;
cin>>a.x>>a.y>>b.x>>b.y;
double c=a.x*b.y-b.x*a.y;
double k=a.y-b.y;
if(fabs(k)<1e-9){ //当k趋近于0时
if(fabs(fabs(c)-4.0)<1e-9) cout<<"0.0";
else cout<<"no answer";
}else{ //当k不趋近于0时
cout<<fixed<<setprecision(10)<<(4.0-c)/k; //注意精度
}
}
int main(){
int t=1;
while(t--){
solve();
}
}

京公网安备 11010502036488号