zoukankan      html  css  js  c++  java
  • 试题 算法提高 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;
    }
  • 相关阅读:
    鸡兔同笼问题
    猴子吃桃问题
    Fibonacci_sequence(斐波那契数列)
    Joseph_Circle(约瑟夫环)
    学生成绩管理--功能全--较难
    各种排序
    二叉排序树操作--基本
    面向对象程序设计(多继承)--简单
    面向对象程序设计3--简单
    使用 ASR 和 Azure Pack 为 IaaS 工作负荷提供托受管 DR
  • 原文地址:https://www.cnblogs.com/mohari/p/13584188.html
Copyright © 2011-2022 走看看