Я в основном пытаюсь создать математическую программу вращения на 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;
}