1070[Hansel and Grethel]

题目鬼长的。

意思就是给出两已知点坐标,还有目的坐标与这两点坐标的角度值,求出目的坐标。

一下想到的是坐标系上两线交叉的位置即目的坐标

但是再求斜率的时候遇上了麻烦- -

于是就找了一份代码研究~

下面放代码,然后再解释:

#include <stdio.h>
#include <math.h>

#define PI acos(-1.0) //圆周率

int main()
{
	int t;
	double x1,y1,d1,x2,y2,d2; //我第一次用float,结果会WA
	double x,y,k1,k2;
	int i;

	scanf("%d", &t);
	for(i = 0; i < t; i++){
		scanf("%lf %lf %lf", &x1,&y1,&d1);
		scanf("%lf %lf %lf", &x2,&y2,&d2);
		k1 = tan((90-d1)*PI/180); //计算斜率
		k2 = tan((90-d2)*PI/180);
		x = (y2 - y1 + k1 * x1 - k2 * x2) / (k1 - k2); //列方程解出来的表达式
		y = (k1 * k2 * x2 - k1 * k2 * x1 + k2 * y1 - k1 * y2) / (k2 - k1);
		printf("%.4lf %.4lf\n", x,y);
	}

	return 0;
}

输出也可用cout~不过有小数点什么的还是printf最方便了~

define是精切定义PI的值

弧度=角度*PI/180

斜率=tan(与x轴的角度)=tan((90-d1)*PI/180)

因为在计算机定义中,tan,cos这些函数后边要接的是弧度不是角度。

剩下的就好理解了~

最后输出!

虽然不是自己写出来的~不过又重新复习了一下斜率啊tan啊这些初中就学的东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值