大侠们,出手吧!
提供一个画圆的程序:
1. view sourceprint?
2. // 八对称性
3.
4. inline void _draw_circle_8(IMAGE *img, int xc, int yc, int x, int y, unsigned long c)
5. {
6. // 参数 c 为颜色值
7. putpixel(img, xc + x, yc + y, c);
8. putpixel(img, xc - x, yc + y, c);
9. putpixel(img, xc + x, yc - y, c);
10. putpixel(img, xc - x, yc - y, c);
11. putpixel(img, xc + y, yc + x, c);
12. putpixel(img, xc - y, yc + x, c);
13. putpixel(img, xc + y, yc - x, c);
14. putpixel(img, xc - y, yc - x, c);
15. }
16.
17. //Bresenham's circle algorithm
18. void draw_circle(IMAGE *img, int xc, int yc, int r, int fill, unsigned long c)
19. {
20. // (xc, yc) 为圆心,r 为半径
21. // fill 为是否填充
22. // c 为颜色值
23. // 如果圆在图片可见区域外,直接退出
24.
25. if(xc + r < 0 || xc - r >= img->w || yc + r < 0 || yc - r >= img->h)
26. {
27. return;
28. }
29.
30. int x = 0, y = r, yi, d;
31. d = 3 - 2 * r;
32.
33. if(fill)
34. {
35. // 如果填充(画实心圆)
36. while(x <= y)
37. {
38. for(yi = x; yi <= y; yi ++)
39. {
40. _draw_circle_8(img, xc, yc, x, yi, c);
41. }
42. if(d < 0)
43. {
44. d = d + 4 * x + 6;
45. }
46. else
47. {
48. d = d + 4 * (x - y) + ;
49. y --;
50. }
51.
52. x++;
53. }
54. }
55. else
56. {
57. // 如果不填充(画空心圆)
58. while (x <= y)
59. {
60. _draw_circle_8(img, xc, yc, x, y, c);
61.
62. if(d < 0)
63. {
64. d = d + 4 * x + 6;
65. }
66. else
67. {
68. d = d + 4 * (x - y) + ;
69. y --;
70. }
71.
72. x ++;
73. }
74. }
75. }
5 个解决方案
#1
很简单哦
#2
加上圆弧的起点和终点就可以了
#3
有固定的算法
#4
看来没人会,算了结题吧。有人有现成的算法的话 希望能够发给我260079139@qq.com
#5
可以到智能车吧看我的精华帖。。。
#1
很简单哦
#2
加上圆弧的起点和终点就可以了
#3
有固定的算法
#4
看来没人会,算了结题吧。有人有现成的算法的话 希望能够发给我260079139@qq.com
#5
可以到智能车吧看我的精华帖。。。