Графическая программа C, генерирующая статический вывод

Я написал простой код для поворота строки. Ниже приведен исходный код:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<graphics.h>
  void main(){
  int gd=DETECT, gm;
  int x1, y1, x2, y2, t, deg, b1, b2;
  initgraph(&gd,&gm,"c:\\tc\\bgi");
  printf("Enter coordinates of line: ");
  scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
  printf("Enter angle of rotation: ");
  scanf("%d",&deg);
  line(x1, y1, x2, y2);
  getch();
  t = (22*deg)/(180*7);
  b1 = cos(t)*x1 - sin(t)*y1;
  b2 = cos(t)*x1 + sin(t)*y1;
  line(x1,y1,b1,b2);
  getch();
  closegraph();
}

Проблема в том, что он генерирует несколько статический вывод и не вращает строку в соответствии с заданным вводом. Повернутая линия почти одинакова для любого значения переменной deg.

Вывод: введите здесь описание изображения введите здесь описание изображения


person user3382203    schedule 22.12.2015    source источник
comment
Используйте числа с плавающей запятой. Если бы у вас был хотя бы приличный компилятор, вы бы получили множество предупреждений о неявном преобразовании целых чисел в числа с плавающей запятой. Вы не должны изучать программирование на языке C с помощью нестандартных, древних мусорных компиляторов.   -  person Lundin    schedule 22.12.2015


Ответы (1)


Ваша переменная t является int, но тригонометрические функции требуют floats или doubles.

Итак, если вы объявите:

int x1, y1, x2, y2, deg, b1, b2;
float t;

Он должен работать. В вашей программе могут быть другие проблемы.

Кстати: дайте несколько очевидных имен вашим переменным, например. angle вместо t.

Кроме того, ваше преобразование из градусов в радианы немного неуклюже, поскольку 22/7 является довольно грубым приближением PI:

t = (22*deg)/(180*7);

используйте скорее это:

t = 3.1415926 * deg / 180

или даже только это (если PI объявлен в вашем подключаемом файле math.h)

t = PI * deg / 180
person Jabberwocky    schedule 22.12.2015
comment
Я внес вышеуказанные изменения, все равно не помогает! - person user3382203; 22.12.2015
comment
Он должен работать. Отладьте свою программу, вставив несколько printfs, чтобы увидеть, какие значения вы получаете в своих переменных (например, printf("x1 = %d, x2 = %d\n", x1, x2);). - person Jabberwocky; 22.12.2015
comment
Я пробовал выше, он выдает статическое значение b1 как 3702 и b2 как 3208 - person user3382203; 23.12.2015