2013-11-13 3 views
-1

Мне было предложено сохранить и нарисовать массив строк. Программа должна распечатать сообщение «Нет пересечения» или «Найденное пересечение» (в зависимости) до завершения, если введены отрицательные координаты или введены два сегмента MAXSEGMENTS.Разработка, если массив сегментов линии пересекается

int main(void) { 
    lineSeg_t line, allsegments[MAXSEGMENTS]; 
    point_t a, b; 
    int pointssofar=0, i, v, w, x, y; 
    OpenGraphics(); 

    while (pointssofar<=(2*MAXSEGMENTS)){ 
     a=GetPoint(); 
     x=XCoord(a); 
     y=YCoord(a); 
     if ((x<0)||(y<0)) 
      break; 
     b=GetPoint(); 
     v=XCoord(b); 
     w=YCoord(b); 
     if ((v<0)||(w<0)) 
      break; 
     line=LineSeg(a, b); 
     DrawLineSeg(line); 
     allsegments[((pointssofar+2)/2)]=line; 

     for (i=0;i<(pointssofar/2);i++){ 
      if (intersect(line, allsegments[i])==TRUE){ 
       printf ("Found an intersection"); 
       pointssofar=2*MAXSEGMENTS; 
      } else if (pointssofar==(2*MAXSEGMENTS)){ 
       printf("No intersection"); 
      } 
     } 
    } 
    for(i=0;i<(pointssofar/2);i++){ 
     if (intersect(allsegments[pointssofar/2], allsegments[i])==FALSE){ 
      printf("No intersection"); 
     } 
    } 
} 

У меня возникли проблемы с выдачей сообщений. Думаю, я застрял в цикле while, и я действительно не уверен, как выйти! Спасибо заранее.

+0

, так что, если введена отрицательная координата, он выходит из цикла while. (break) – user2945892

+0

У меня есть файл заголовка descartes.h, если это то, что вы имеете в виду? – user2945892

+0

Это было написано моим лектором, и я не знаю, как к нему можно получить к сожалению. Я использовал его в прошлом, и он работал. Они возвращают отрицательные числа – user2945892

ответ

0

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

while (pointssofar<=(2*MAXSEGMENTS)){ 

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

pointssofar=2*MAXSEGMENTS; 

, которые удовлетворяют условию цикла While.

У вас также есть 2 break выписки, но они полностью зависят от функций XCoord и YCoord. Возможно, они никогда не вернут отрицательные числа.

+0

, где я должен его увеличивать? (и как) – user2945892

0

Вы, кажется, не увеличиваете очки, если не найдете пересечения.

+0

делает все сегменты [((pointssofar + 2)/2)] = line; не увеличить его? – user2945892

+0

Нет. Он просто индексирует массив allsegments. –

+0

, так как/где я должен его увеличивать? id Я делаю это в начале, код по какой-то причине принимает только одну строку. Спасибо – user2945892

Смежные вопросы