2013-07-31 11 views
1

내 슬로프가 1에 대해서는 올바르게 작동하지만 다른 슬로프에는 적합하지 않습니다. 1 이외의 경사면에 대한 수평선 또는 수직선 그리기.이 코드의 문제점. 도움이 될 것입니다.DDA 알고리즘은 일부 좌표의 선을 그리지 않습니까?

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

int main() 
{ 
int x,y,x1,y1,x2,y2,dx,dy; 
float step; 

int i,gd,gm; 

printf("Enter the value of x1,y1: "); 
scanf("%f%f",&x1,&y1); 
printf("Enter the value of x2,y2 : "); 
scanf("%f%f",&x2,&y2); 


detectgraph(&gd,&gm); 
initgraph(&gd,&gm,""); 

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

if(dx>=dy) 
step=dx; 
else 
step=dy; 

dx=dx/step; 
dy=dy/step; 

x=x1; 
y=y1; 

i=1; 
while(i<=step) 
{ 
     putpixel(x,y,1); 
     x=x+dx; 
     y=y+dy; 
     i=i+1; 
     delay(100); 
} 
getch(); 
} 
+0

http://scratchapixel.com/lessons/3d-basic-lessons/lesson-12-acceleration-structures/grid/ 일반적으로 DDA 알고리즘에 대한 정보와 코드는 다음을 참조하십시오. – user18490

답변

1
dx=dx/step; 
dy=dy/step; 

단계 부동 만든했지만, DX와 DY 정수입니다. 따라서이 나누기는이 두 값 중 하나에 0을 부여합니다. 나는 DDA 루틴이 모든 정수 였기 때문에 플로트를 가지고 있다는 것이 나를 놀라게한다는 인상 아래에있었습니다. 알고리즘을 자세히 살펴보고 내가 무엇을 찾았는지 살펴 보겠습니다.

Here's 단계를 0이되지 않는 방식으로 부동을 사용하는 루틴.

another (Windows 용)

+0

dx, dy를 수정하여 일부 작업을 수행하지만 예를 들어 문제가 있습니다. 복용하는 경우 (200,0)과 (0,200) 그려진 선이 옳지 않습니다. – Ani

+0

0으로 나누는 것을 방지하려면 특별한 경우 수평/수직선이 필요합니다. 여기에서 인터넷상의 다양한 샘플을보십시오. –

1

당신이 바로

scanf("%f%f",&x1); 
scanf("%f%f",&y1); 

문에서 하나 개의 값을 받아들이는 것 같다. 이를 수정하고 코드를 다시 실행하십시오.

+0

오, 미안 .. 입력 실수. 나는 실제 코드에서 올바르게 작성했다. – Ani