• 中点Brehensam画线算法


      1 #include<stdio.h>
      2 
      3 #include<stdlib.h>
      4 
      5 #include"graphics.h"
      6 
      7  
      8 
      9 //函数声明
     10 
     11 void MidBrehansem(int x0, int y0, int x1, int y1);  //中点MidBrehansem算法
     12 
     13 void swap(int &x, int &y);  //利用引用传递交换值
     14 
     15  
     16 
     17 int main()
     18 
     19 {
     20 
     21     int gdriver = DETECT, gmode;
     22 
     23     int x0, y0, x1, y1;
     24 
     25  
     26 
     27     printf("Please input start point:
    ");
     28 
     29     scanf("%d%d", &x0, &y0);
     30 
     31     printf("Please input end point:
    ");
     32 
     33     scanf("%d%d", &x1, &y1);
     34 
     35  
     36 
     37     initgraph(&gdriver, &gmode, "");
     38 
     39  
     40 
     41     MidBrehansem(x0, y0, x1, y1);
     42 
     43    
     44 
     45     system("pause");
     46 
     47  
     48 
     49     closegraph();
     50 
     51  
     52 
     53     return 0;
     54 
     55 }
     56 
     57  
     58 
     59 //中点MidBrehansem算法
     60 
     61 void MidBrehansem(int x0, int y0, int x1, int y1)
     62 
     63 {
     64 
     65     int  dx, dy,i,di;
     66 
     67     double k;
     68 
     69  
     70 
     71     if (x0 > x1)
     72 
     73     {
     74 
     75         swap(x0, x1);
     76 
     77         swap(y0, y1);
     78 
     79     }
     80 
     81  
     82 
     83     int x = x0, y = y0;     //定义到前面会从x1,y1开始画线
     84 
     85  
     86 
     87     dx = x1 - x0;
     88 
     89     dy = y1 - y0;
     90 
     91  
     92 
     93     k = 1.0*dy / dx;
     94 
     95     i = (abs(dy)>abs(dx)) ? abs(dy): abs(dx);
     96 
     97  
     98 
     99     if (k >= 1)
    100 
    101     {
    102 
    103         di = 2 * dx + dy;
    104 
    105         while (i--)
    106 
    107         {
    108 
    109             putpixel(x, y, RED);
    110 
    111             if (di >= 0)
    112 
    113             {
    114 
    115                 di += 2 * (dx - dy);
    116 
    117                 x++;
    118 
    119             }
    120 
    121             else
    122 
    123                 di += 2 * dx;
    124 
    125  
    126 
    127             y++;
    128 
    129         }
    130 
    131     }
    132 
    133     else if (k >= 0 && k < 1)
    134 
    135     {
    136 
    137         di = dx - 2 * dy;
    138 
    139         while (i--)
    140 
    141         {
    142 
    143             putpixel(x, y, YELLOW);
    144 
    145             if (di < 0)
    146 
    147             {
    148 
    149                 di += 2 * (dx - dy);
    150 
    151                 y++;
    152 
    153             }
    154 
    155             else
    156 
    157                 di += (-2)*dy;
    158 
    159  
    160 
    161             x++;
    162 
    163         }
    164 
    165     }
    166 
    167     else if (k >= -1 && k < 0)
    168 
    169     {
    170 
    171         di = -dx - 2 * dy;
    172 
    173         while (i--)
    174 
    175         {
    176 
    177             putpixel(x, y, YELLOW);
    178 
    179             if (di >= 0)
    180 
    181             {
    182 
    183                 di += (-2)*(dx + dy);
    184 
    185                 y--;
    186 
    187             }
    188 
    189             else
    190 
    191                 di += (-2)*dy;
    192 
    193  
    194 
    195             x++;
    196 
    197         }
    198 
    199     }
    200 
    201     else
    202 
    203     {
    204 
    205         di = -2 * (dx + dy);
    206 
    207         while (i--)
    208 
    209         {
    210 
    211             putpixel(x, y, WHITE);
    212 
    213             if (di < 0)
    214 
    215             {
    216 
    217                 di += (-2)*(dx + dy);
    218 
    219                 x++;
    220 
    221             }
    222 
    223             else
    224 
    225                 di += (-2)*dx;
    226 
    227  
    228 
    229             y--;
    230 
    231         }
    232 
    233     }
    234 
    235    
    236 
    237 }
    238 
    239  
    240 
    241 //利用引用传递交换值
    242 
    243 void swap(int &x, int &y)
    244 
    245 {
    246 
    247     int t;
    248 
    249  
    250 
    251     t = x;
    252 
    253     x = y;
    254 
    255     y = t;
    256 
    257 }

  • 相关阅读:
    ABB机器人 带参数例行程序
    面试题10- I:斐波那契数列(C++)
    面试题39:数组中出现次数超过一半的数字(C++)
    面试题50:第一个只出现一次的字符(C++)
    第八部分 表的基本操作
    第七部分 表中数据的基本操作
    面试题18:删除链表的节点(C++)
    面试题35:复杂链表的复制(C++)
    面试题54:二叉搜索树的第k大节点(C++)
    面试题62:圆圈中最后剩下的数字(C++)
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/6823058.html
Copyright © 2020-2023  润新知