单片机 LCD C语言画弧线的程序,谁会?
C语言画 弧线的程序,谁会? 不要带大量重复sin或者cos的,那样会很慢。下面画圆的程序可以改成画弧形的程序吗?
大侠们,出手吧!
提供一个画圆的程序:
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.}
[解决办法]
加上圆弧的起点和终点就可以了
[解决办法]
有固定的算法