任务是计算两个物体在圆周上移动的直线距离

时间:2018-08-04 08:34:22

标签: c

enter image description here

我们有两个点对象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)));
}

我还参与了其他工作:https://math.stackexchange.com/questions/1727504/calculate-distance-between-two-points-on-concentric-circles

1 个答案:

答案 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));
}