Программа ротации в C - PullRequest
       4

Программа ротации в C

0 голосов
/ 29 апреля 2018

Я в основном пытаюсь создать математическую программу вращения на C. Но результат всегда неверный. P (x, y) вращается вокруг Q (r, s); по часовой стрелке (направление = 1) или против часовой стрелки (направление = 0). A, b, c - углы в тройке, я думаю, вопрос означает, что c - в сотнях, а b - в десятках, а a - в единицах.

Ввод:

   0
   7 3
   0 1 1
   0 0 

Выход: -3 7

Тогда как я получаю -5 5.

Спасибо за ваше время, если вы мне поможете.

Оригинальная ссылка на вопрос: https://www.codechef.com/problems/DSPC305

Я нашел другой вопрос от того же загрузчика, который тоже использует TRIPLE Далее он добавил примечание: Тройка определяется a, b, c, где a - основание, b - высота, а c - гипотенуза треугольника. Каждая тройка соответствует углу, заданному как cosA = a / c

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

 int main() {
     int x,y,a,b,direction,c,r,s,xnew,ynew;

     scanf("%i", &direction);
     scanf("%i %i", &x, &y);
     scanf("%i %i %i" , &a, &b, &c);
     scanf("%i %i", &r, &s);

     float PI = 3.1415926535897932384626;
     float theta = ((c*100+b*10+a)*PI)/180;

     if (direction==1)
     {
          xnew= (x-r) * cos(theta) + (y-s) * sin(theta);
          ynew= -(x-r) * sin(theta) + (y-s) * cos(theta);
          printf("%i %i", xnew+r, ynew+s);
     }

     if (direction==0)
     {
          xnew =( (x-r) * ((cos(theta))) - (y-s) * sin(theta));
          ynew =( (x-r) * ((sin(theta))) + (y-s) * cos(theta));
          printf("%i %i", (xnew+r), (ynew+s));
     }
     return 0;
}

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы можете использовать этот код:

#include<stdio.h>
#include<math.h>
int main()
{
    double xp,yp,xq,yq,a,b,c;
    double t,xn,yn;
    int z;
    scanf("%d",&z);
    scanf("%lf%lf",&xp,&yp);
    scanf("%lf%lf%lf",&a,&b,&c);
    scanf("%lf%lf",&xq,&yq);
    t=asin(b/c);
    if(z==0)
    {
    xn=xp*cos(t)-yp*sin(t)-xq*cos(t)+yq*sin(t)+xq;
    yn=xp*sin(t)+yp*cos(t)-xq*sin(t)-yq*cos(t)+yq;
    }
    else
    {
    xn=xp*cos(t)+yp*sin(t)-xq*cos(t)-yq*sin(t)+xq;
    yn=-xp*sin(t)+yp*cos(t)+xq*sin(t)-yq*cos(t)+yq;
    }
    printf("%0.lf %0.lf",xn,yn);
    return 0;
}

Этот код дал правильный вывод для обоих тестов, приведенных в вопросе.
Скажите, сработало ли это:)

0 голосов
/ 29 апреля 2018

Это

float theta = ((c*100+b*10+a)*PI)/180;

не имеет ничего общего с определением тройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...