题目题意

输入两个点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();
    }
}