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;
    }
  • 相关阅读:
    希尔排序(java实现)
    直接插入排序(java实现)
    android AsyncTask使用限制
    android TranslateAnimation动画执行时的坐标获取。
    android内存管理机制
    android实现前置后置摄像头相互切换
    【转-整理】JavaWeb框架中,各层的解释和关系
    安卓系统上安装.net运行时 mono runtime
    你不知道的https工作原理
    HTTPS的误解(二)
  • 原文地址:https://www.cnblogs.com/mohari/p/13584188.html
Copyright © 2011-2022 走看看