计算出一系列线段是否相交

时间:2013-11-13 19:26:29

标签: c if-statement for-loop while-loop

我被要求存储和绘制一系列的linesegments。 该程序应打印消息" No intersection"或者"找到一个十字路口"如果输入了负坐标或输入了2x 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循环中,我真的不知道如何离开! 提前谢谢。

2 个答案:

答案 0 :(得分:0)

你的while循环永远不会终止,因为它中没有任何一行会使条件不正确。

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

你唯一能改变这些价值的是

pointssofar=2*MAXSEGMENTS;

满足while循环条件。

您还有2个break语句,但这些语句完全依赖于XCoordYCoord函数。他们可能实际上不会返回负数。

答案 1 :(得分:0)

除非你找到一个交叉点,否则你似乎没有增加pointssofar。