【问题标题】:Working out if an array of line segments intersect计算线段数组是否相交
【发布时间】:2013-11-26 13:49:04
【问题描述】:

我被要求存储和绘制一系列线段。 如果输入负坐标或输入了 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 循环中,我真的不知道如何出去! 提前谢谢你。

【问题讨论】:

  • 这样如果输入负坐标,它就会退出 while 循环。 (休息)
  • 我有一个 decartes.h 头文件,如果这就是你的意思吗?
  • 这是我的讲师写的,不幸的是我不知道如何访问它。我过去曾使用过它,但它确实有效。他们确实返回负数

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


【解决方案1】:

您的 while 循环将永远不会终止,因为其中没有任何行会使它的条件不成立。

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

你改变任何这些值的唯一时间就是你得到的是

pointssofar=2*MAXSEGMENTS;

满足while循环条件。

您还有 2 个 break 语句,但它们完全依赖于 XCoordYCoord 函数。他们可能永远不会真正返回负数。

【讨论】:

  • 我应该在哪里增加它? (以及如何)
【解决方案2】:

除非你找到一个交叉点,否则你似乎不会增加点。

【讨论】:

  • 执行所有段[((pointssofar+2)/2)]=line;不增加它?
  • 没有。它只是索引到 allsegments 数组。
  • 那么我应该如何/在哪里增加它?我一开始就这样做了,由于某种原因,代码只接受一行。谢谢
  • 这里有一些提示:1) 如果你写了 GetPoint,那么让它返回 -1 表示坏点 2) 然后你可以删除 x、y、v、w 变量 3) allsegments 变量在为其分配 line 时,应按 pointssofar 进行索引。每次循环迭代只有一行。 4)在for循环中,你的上限应该是pointssofar(因为那是你当时有多少) 5)将while循环更改为for循环。 6) 为什么会有第二个 for 循环?
猜你喜欢
  • 1970-01-01
  • 2019-01-24
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多