我们有两个点对象B和C静止在直线上,距点A分别为r1和r2单位。在时间t = 0秒处,对象开始在圆形路径中以A为中心移动角速度v1和v2每秒。
给定输入v1,v2,r1和r2,计算N秒后B和C之间的距离。 我已经做到了,但是给出的答案是错误的,有人可以建议我提供更好的解决方案。
#include"stdio.h"
#include"math.h"
int main()
{
float v1,v2,r1,r2,t;
scanf("%f%f%f%f%f", &v1, &r1, &v2, &r2, &t);
int diff = v1 > v2 ? (v1 - v2) : (v2 - v1);
int total_diff = diff * t;
if(total_diff % 360 == 0)
printf("%.2f", r2 - r1);
else if(total_diff % 180 == 0)
printf("%.2f", r1 + r2);
else if(total_diff % 90 == 0)
printf("%.2f", sqrt(pow(r2, 2) - pow(r1, 2)));
else
printf("%.2f", sqrt(pow(total_diff, 2) - pow(r2-r1, 2)));
}
答案 0 :(得分:5)
更好的方法
我将为此使用极坐标。更好地解决了这个问题。
#include <stdio.h>
#include <math.h>
float distance(float v1, float r1, float v2, float r2, float dt) {
// Calculate new positions and convert to radians
float fi1 = v1*dt*M_PI/180, fi2 = v2*dt*M_PI/180;
// Polar distance formula
return sqrt(pow(r1, 2) + pow(r2, 2) - 2*r1*r2*cos(fi1-fi2));
}
int main()
{
float v1,v2,r1,r2,t;
scanf("%f%f%f%f%f",&v1,&r1,&v2,&r2,&t);
printf("%.2f\n", distance(v1,r1,v2,r2,t));
}