• 试题 算法提高 WYF的交易地点(简单计算几何)


    问题描述
      WYF酷爱玩魔兽世界。这天他要去4个不同的地方A、B、C、D。现在CWZ要WYF给他500金。WYF不情愿地答应了。他告诉CWZ,在直线AC和BD的交点E等他。CWZ立刻前往交易地点。突然WYF发现一个致命的问题——他的智商严重不够,算不出AC、BD的交点E的位置......。于是——现在问题来了——他找到了机智的你,要你求出AC、BD的交点E。如果没有交点或AC、BD重合,请输出“LLJJ”。
    输入格式
      输入共四行,每行为2个实数,保留2位小数。
      第一行为Xa,Ya;
      第一行为Xb,Yb;
      第一行为Xc,Yc;
      第一行为Xd,Yd。
    输出格式
      输出仅一行,为交点的坐标Xe,Ye,保留5位小数。
    样例输入
    1.00 1.00
    1.00 -1.00
    -1.00 -1.00
    -1.00 1.00
    样例输出
    0.00000 0.00000
    数据规模和约定
      |X|,|Y|<=290。
    思路
    由点斜式y=kx+b,已知两点坐标可得k=(y1-y2)/(x1-x2),b=(x2*y1-x1*y2)/(x2-x1);
    当斜率相同时即没有交点,否则一定相交。
    由k1x+b1=k2x+b2,很容易得到x=(b2-b1)/(k1-k2),代回原直线即得y坐标。
    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        double x,y,x1,x2,x3,x4,y1,y2,y3,y4,k1,k2,b1,b2;
        cin>>x1>>y1;
        cin>>x2>>y2;
        cin>>x3>>y3;
        cin>>x4>>y4;
        k1=(y1-y3)/(x1-x3);
        k2=(y2-y4)/(x2-x4);
        b1=(x3*y1-x1*y3)/(x3-x1);
        b2=(x4*y2-x2*y4)/(x4-x2);
        if(k1==k2){
            cout<<"LLJJ"<<endl;
        }
        else{
            x=(b2-b1)/(k1-k2);
            y=k1*x+b1;
            printf("%.5f %.5f
    ",x,y);
        }
        return 0;
    }
  • 相关阅读:
    如何进行在线Post接口测试?
    如何作为手动测试人员进入自动化测试
    用于测试API的开发人员工具
    使用Eolinker API 监控将API升到一个全新的水平
    如何通过自动化随着时间的推移增加测试覆盖率
    如何使用eolinker管理api
    从手动测试转向自动测试
    API是什么以及它为什么重要
    关于API网关(二)成本
    软件可测试性
  • 原文地址:https://www.cnblogs.com/mohari/p/13584188.html
Copyright © 2020-2023  润新知