2013-09-12 7 views
3

Я пытаюсь нарисовать линию на языке C с использованием алгоритма Брешенема. Я использую turbo C++ в dosbox для Windows 7 для реализации этого кода. В то время как компиляция я не получаю никакой ошибки, но когда i выполнения кода программа завершается после получения-совместно ordinates.Please Помощи ..Линия чертежа Bresenham Код

сообщения о компиляции выглядит следующим образом .. enter image description here

путь каталоги заключается в следующий enter image description here

Моего кода ..

# include <stdio.h> 
    # include <conio.h> 
    # include <graphics.h> 

    void main() 
    { 
    int dx,dy,x,y,p,x1,y1,x2,y2; 
    int gd,gm; 

    clrscr(); 

    printf("\n\n\tEnter the co-ordinates of first point : "); 
    scanf("%d %d",&x1,&y1); 
    printf("\n\n\tEnter the co-ordinates of second point : "); 
    scanf("%d %d",&x2,&y2); 

    dx = (x2 - x1); 
    dy = (y2 - y1); 

    p = 2 * (dy) - (dx); 

    x = x1; 
    y = y1; 

    detectgraph(&gd,&gm); 
    initgraph(&gd,&gm,"e:\\tc\\bgi"); 
    putpixel(x,y,WHITE); 

    while(x <= x2) 
    { 
     if(p < 0) 
     { 
     x=x+1; 
     y=y; 
     p = p + 2 * (dy); 
     } 
     else 
     { 
     x=x+1; 
     y=y+1; 
     p = p + 2 * (dy - dx); 
    } 
    putpixel(x,y,WHITE); 
    } 
    getch(); 
    closegraph(); 
} 
+5

Если вы не работаете с встроенными системами, 'void main()' ошибочно, неправильно, неправильно. 'int main (void)', для h ** k! – verbose

+0

Не могли бы вы точно указать ошибку и номер строки. –

+0

Я не получаю сообщение об ошибке как таковое при компиляции или запуске ... только, что, когда я ввожу значения 1-й координаты, программа заканчивается внезапно ... – Lucy

ответ

0

Это типичный идеальный момент для запуска отладчика и пошагового прохождения кода, наблюдая за любыми переменными. Если отладчик недоступен, отладка printf на консоли является альтернативой резервного копирования.

Первый наконечник, чтобы проверить, что эти линии не генерируют сигнал ошибки/исключения:

detectgraph(&gd,&gm); 
    initgraph(&gd,&gm,"e:\\tc\\bgi"); 
    putpixel(x,y,WHITE); 
+0

Я добавил скриншот в свой вопрос .. мне все еще нужно внести изменения, которые вы упомянули? – Lucy

1

ОП следует размещать вход, который был использован.

Отмеченный образец кода не работает x1>x2 или y1>y2. Это один набор входных данных, который бы резко остановил рутину. Для того, чтобы исправить, то dx и dy должны быть основаны на абсолютной величине и постепенные x & y шаги должны быть независимо друг от друга +1или-1.

Ввод 3,4 вместо 3 4 (запятая против пробелов) также испортит рутину.

В цикле while рекомендуем if(p <= 0).

OP «... код программы заканчивается после получения 2-х координат». недостаточно детально, поскольку, конечно, код должен прекратить свое существование после получения 2-х координат. Но OP не детализирует, где он заканчивается слишком рано.

+0

Я проверил код, который он работает для 3, 4, 7 и 8-го октанта, но не для других 4, просто создайте беспорядок. –

0

Способ устранения проблемы, изменив путь в функции InitGraph по адресу, указанному в снимок экрана ..

   detectgraph(&gd,&gm); 
      initgraph(&gd,&gm,"C:\\TURBOC3\\bgi"); 
      putpixel(x,y,WHITE); 
0

Хорошая программа. Но вы не инициализировали какой-либо цикл, а строки, закодированные во время цикла, были частично неправильными. Вот моя попытка: -

i = 1; // loop initialization 
do { 
    putpixel(x, y, 15); 
    while(p >= 0) { 
     y = y + 1; 
     p = p - (2 * dx); 
    } 
    x = x + 1; 
    p = p + (2 * dy); 
    i = i + 1; 
} 
while(i <= dx); 
Смежные вопросы