попытка передать структуру с двумя элементами функции (без использования указателей), чтобы получить новый вывод для двух элементов - PullRequest
0 голосов
/ 08 мая 2020

Итак, я пишу фрагмент кода для перевода точки x и y, которые являются элементами структуры, в направлении x, направлении y и вращением вокруг начала координат на основе пользовательских вводов для x, y и угла тета соответственно. Как передать структуру через функцию поворота (без использования указателей, поскольку мы еще не рассмотрели это), спасибо. код ниже, спасибо.

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

typedef struct
{
float x;
float y;
}coordinate;

float xNew(float x, float x2);
float yNew(float y, float y2);
coordinate Rotate( coordinate pointA, float angle);


void main()

{

coordinate pointA;
float x,y,x2,y2, theta;
 coordinate newpoints;

printf("Enter coordinates>");
scanf("%f%f", &pointA.x, &pointA.y);

printf("Enter x offset>");
scanf("%f", &x2);
x = xNew(pointA.x, x2);

printf("Enter y offset>");
scanf("%f", &y2);
y = yNew(pointA.y, y2);

printf("Enter rotation value in degrees");
scanf("%f", &theta);
newpoints = Rotate(pointA, theta);

printf("offsets were %f%f\n",x2,y2 );
printf("new coords are%f%f\n", x,y);
pointA.x = x;
pointA.y = y;
printf("struc coords are%f%f", pointA.x, pointA.y);
return;
}

float xNew(float x, float x2)
{
float xpos;

xpos = x+x2;
return(xpos);
}

float yNew(float y, float y2)
{
float ypos;

ypos = y + y2;
return(ypos);

coordinate Rotate( pointA, float angle)
{

  coordinate pointA;
  float theta;

pointA.x = cos(theta)*pointA.x - sin(theta)*pointA.y;
pointA.y = sin(theta)*pointA.x + cos(theta)*pointA.y;

return(pointA);

}
}

РЕДАКТИРОВАТЬ: опубликовал обновленный код, получена только одна ошибка

ошибка: ожидается ')' перед координатой 'float' Повернуть (pointA, float angle) я не знаю, что происходит

1 Ответ

1 голос
/ 08 мая 2020

Во-первых, попробуйте сделать отступ в коде для лучшей читаемости. Во-вторых, это мой первый ответ, так что терпите меня.

Итак, первая ошибка, которую я заметил, была такая:

float yNew(float y, float y2)
{
float ypos;

ypos = y + y2;
return(ypos);

coordinate Rotate( pointA, float angle)
{

  coordinate pointA;
  float theta;

pointA.x = cos(theta)*pointA.x - sin(theta)*pointA.y;
pointA.y = sin(theta)*pointA.x + cos(theta)*pointA.y;

return(pointA);

}
}

  1. Функция Rotate кажется вложенной, если вы хотите, чтобы он был «снаружи».
  2. pointA уже используется в качестве параметра (без объявления типа), а затем вы повторно объявляете его внутри функции.

3. theta объявляется и используется неинициализированным. Фактически, это избыточная переменная.

pointA объявлено без типа. coordinate

Обновленный код:

float yNew(float y, float y2)
{
float ypos;

ypos = y + y2;
return(ypos);
}

coordinate Rotate(coordinate pointA, float angle)
{

  coordinate pointB;

pointB.x = cos(angle)*pointA.x - sin(angle)*pointA.y;
pointB.y = sin(angle)*pointA.x + cos(angle)*pointA.y;

return(pointB);

}

Вы указали newpoints, но никогда не использовали его. Таким образом, выходные значения имеют исходную структуру (введенные). Попробуйте следующее:

printf("Enter rotation value in degrees");
scanf("%f", &theta);
newpoints = Rotate(pointA, theta);

printf("offsets were %f%f\n",x2,y2 );
printf("new coords are%f%f\n", x,y);

printf("struc coords are%f   %f", newpoints.x, newpoints.y);

Однако я не проверял формулу преобразования.

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