re-m2 2017-11-07 14:26 采纳率: 100%
浏览 952
已采纳

关于扫描线算法的异常

本人菜鸟,刚学习计算机图形学,现在要实现其中的扫描线算法,现在已知边的结构图片说明
现在要转化成扫描线边结构图片说明
我的想法是先建立一个边分类表数组,每个成员包含两个指针,一个不动,一个游动,插入新元素时使用游动的指针,通过不动的指针找到数组的头一个元素,当然现在未排序,我想在第一次插入边时会赋值给head(不动指针),但调试结果说明直接跳过了这个步骤,导致出现访问冲突,所以想求教前辈
void PolygonScanning::ScanningPolygon(){
// 多边形的边保存在数组edges中
// 像素的颜色可以使用函数cv->MySetPixel(int x, int y, int color)设置
// 使用扫描线算法扫描转换多边形
struct ET
{
Edge * head,*move; //设定两个指针,一个可活动一个不活动,注意连续创建指针时指针前加*
};
ET ETtable[300]; //建立et表

Edge* q;                       //这个指针用来存放临时数据

//接下来将edges中的边保存到ETtable中去,取出edges中所有边,直到取完为止
for (MyEdge* p = &edges[0]; p != NULL; p++)
{
    q = new Edge;                                //暂不考虑斜率为0或无穷

    q->deltax = (p->x1 - p->x2) / (p->y1 - p->y2);            //计算斜率倒数

//将较大的y值赋予ymax,把y值较小的点的x值赋予x,并插入到较小的y值的那一类中

    if (p->y1 > p->y2)                          //y1比y2大
    {                                           
        q->ymax = p->y1;
        q->x = p->x2;            

        int temp1 = (int)(p->y2);               //先把y2转化成整形,再放入下标为y2的类

        if (ETtable[temp1].head==NULL)          //如果这是第一次对第i类赋值
        {
            ETtable[temp1].head = q;
            ETtable[temp1].move = q;
        }
        else
        {
            ETtable[temp1].move->nxt = q;//每一类中有一个move指针,它是运动的,将新来的插入move后,再改变move
            ETtable[temp1].move = q;
        }
    }

    else                          //y2比y1大
    {
        q->ymax = p->y2;
        q->x = p->x1;

        int temp2 = (int)(p->y1);               //先把y1转化成整形,再放入下标为y的类

        if (ETtable[temp2].head==NULL)          //如果这是第一次对第i类赋值
        {
            ETtable[temp2].head = q;
            ETtable[temp2].move = q;
        }
        else
        {
            ETtable[temp2].move->nxt = q;//每一类中有一个move指针,它是运动的,将新来的插入move后,再改变move
            ETtable[temp2].move = q;
        }
    }
}

结果如图图片说明

  • 写回答

2条回答

  • devmiao 2017-11-07 15:03
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗