【题意】

给定两个点相对于Hansel and Grethel的横纵坐标,以及它们与北方向的夹角[0,360),求Hansel and Grethel所在位置的坐标。

【思路】

根据两个参考点坐标和方向角,求出两条直线的方程,两条直线的交点就是所求的坐标。

求直线方程时分斜率存在和斜率不存在两种情况,斜率存在时分(0,90]υ(270,360)和(90,180)υ(180,270]两种情况。其实两种情况应该可以合并,我看有人写的代码很短。我写的代码比较长,但是思路是比较直接的,很多功能重复的地方也就多复制几次好了。

值得注意的一点就是两个double型的值相比较是不能用等于号的。以后遇到这样的题最重要的是要细心一步一步来,不要把会做的题做错了。

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio>
 4 using namespace std;
 5
 6 const double pi=acos(-1.0);   //还是计算出来精确,手动赋值不行
 7
 8 double get_k(double a)      //由一个点所处的角度得到直线斜率
 9 {
10       double k;
11       if((a>0 && a<=90) || (a>270 && a<360))
12       {
13                k=tan((90-a)*pi/180);
14       }
15       else if((a>90 && a<180) || (a>180 && a<=270))
16       {
17               k=tan((270-a)*pi/180);
18       }
19       return k;
20 }
21
22 int main()
23 {
24     int t;
25     cin>>t;
26     while(t--)
27     {
28               double x1,y1,a1,x2,y2,a2;
29               scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&a1,&x2,&y2,&a2);
30               double k1,k2,x,y,a,b;
31
32               if((a1!=0 && a1!=180)  && (a2!=0 && a2!=180))   //两条直线斜率都存在
33               {
34                       k1=get_k(a1);
35                       k2=get_k(a2);
36
37                       if(fabs(k1-k2)>0.00000001)
38                       {
39                               a=k1*x1-y1;     //a、b为中间变量
40                               b=k2*x2-y2;
41                               x=(a-b)/(k1-k2);
42                               y=k1*x-a;
43
44                               printf("%.4lf ",x);
45                               printf("%.4lf\n",y);
46                       }
47                       else
48                       {
49                               x=(x1+x2)/2;
50                               y=(y1+y2)/2;
51
52                               printf("%.4lf ",x);
53                               printf("%.4lf\n",y);
54                       }
55               }
56               else if( (a1==0 || a1==180) && (a2!=0 && a2!=180) )   //直线1斜率不存在,直线2存在
57               {
58                       k2=get_k(a2);
59                       x=x1;
60                       y=k2*(x1-x2)+y2;
61
62                       printf("%.4lf ",x);
63                       printf("%.4lf\n",y);
64               }
65               else if( (a2==0 || a2==180) && (a1!=0 && a1!=180) )  //直线1斜率存在,直线2不存在
66               {
67                       k1=get_k(a1);
68                       x=x2;
69                       y=k1*(x2-x1)+y1;
70
71                       printf("%.4lf ",x);
72                       printf("%.4lf\n",y);
73               }
74               else                                    //两条直线斜率都不存在
75               {
76                       x=x1;
77                       y=(y1+y2)/2;
78
79                       printf("%.4lf ",x);
80                       printf("%.4lf\n",y);
81               }
82     }
83      return 0;
84 }                                 

转载于:https://www.cnblogs.com/mrlaker/archive/2012/07/15/2592664.html

Sicily Hansel and Grethel相关推荐

  1. sicily 1070. Hansel and Grethel

    #include<iostream> //求两直线交点#include<stdio.h>#include<cmath>using namespace std;#de ...

  2. POJ 1254 Hansel and Grethel G++ 数学 巧妙

    #include <iostream> #include <cstdio> #include <cmath> #include <iomanip> us ...

  3. 1070[Hansel and Grethel]

    题目鬼长的. 意思就是给出两已知点坐标,还有目的坐标与这两点坐标的角度值,求出目的坐标. 一下想到的是坐标系上两线交叉的位置即目的坐标 但是再求斜率的时候遇上了麻烦- - 于是就找了一份代码研究~ 下 ...

  4. poj 1254 Hansel and Grethel 直线求交

    题意: 通过点和方向给出两条直线,求他们的交点. 分析: 裸的直线求交,向量做法可避免特殊情况的的讨论. 代码: //poj 1254 //sep9 #include <iostream> ...

  5. zoj 1560 Hansel and Grethel(求两条直线的交点)

    题目地址 题目大意:给出2个点及其各自夹角,求2条直线的交点 解题思路:数学公式推导,用tan()求斜率时要将角度转换成弧度 #include <iostream> #include &l ...

  6. Hansel and Grethel ACM pku http://acm.pku.cn/JudgeOnline/problem?id=1254

    1254是一道非常简单的关于平面直线相交问题的计算,只要注意一点: 斜率并不是所给出的指南针上的度数而应该是(90-degree):解决了此问题后所有的问题都迎刃而解了 我的代码如下: #includ ...

  7. ACM 网址和一些建议

    USACO http://ace.delos.com/usacogate 美国著名在线题库,专门为信息学竞赛选手准备 TJU http://acm.tongji.edu.cn/ 同济大学在线题库,唯一 ...

  8. ACM大量习题题库及建议培养计划

    ACM大量习题题库 ACM大量习题题库  现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO h ...

  9. ACM题目和培养训练!!!

    ACM大量习题题库 ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO ht ...

最新文章

  1. R语言使用ggplot2包和plotrix包绘制带有错误条(error bars)的可视化结果:使用ggplot2包绘制具有置信区间的可视化图像、使用plotrix包绘制具有置信区间的可视化图像
  2. 熟悉Linux实验实训,非常详细的Linux操作系统与实训教程实验(三)
  3. 【Android】安卓布局文件中xmlns属性
  4. ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: ‘
  5. 国际掉期与衍生工具协会(ISDA)
  6. 探索Julia(part8)--循环语句和条件语句
  7. ZOJ 1242 Carbon Dating
  8. Android学习导航线路
  9. GBaseStudio连接操作GBase数据库
  10. 微信小程序发送微信公众号模板消息
  11. 浅析图的邻接矩阵进行平方运算的含义
  12. 全面解决网站被攻击解决办法
  13. 空指针异常的原因分析
  14. C语言停车场管理系统
  15. 新研究调查Masimo ORi™(氧储备指数)能否用作避免全麻期间高氧状态的指数
  16. Bond随你入坑kubernetes之:入门篇 - 搭建多节点集群+Dashboard+监控
  17. windows下 python 使用 pip 安装TA-Lib报错的原因及解决方法
  18. 【MySQL】MyCAT三大配置文件详解(MySQL专栏启动)
  19. 亲历5.12汶川大地震----杨大伟作为志愿者14日奔赴汶川等地抗震救灾
  20. 多单、空单、开仓、平仓、持仓、现货、期货、通货膨胀.......

热门文章

  1. 推荐表的特长聘请html,毕业推荐表中的有何特长怎么写?
  2. 惠普服务器系统装好服务器黑屏,惠普装win7系统黑屏怎么解决_惠普装win7系统黑屏如何修复...
  3. 记录:tensoflow改错TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a float into a Te
  4. 2021年全球半导体分立器件市场规模大约为1898亿元,预计2028年将达到3255亿元
  5. c++初学者——一个简单的电话簿系统制作
  6. 惊!终于知道为什么我的电脑在升级之后磁盘容量看起来让人心忧
  7. PHP Excel类Spreadsheet_Excel_Writer简介
  8. 四川省房产测绘实施细则[2010版]-2
  9. 安卓手机怎么不用ROOT激活XPOSED框架的方法
  10. C#通过引用AForge获取摄像头数据