当前位置:   article > 正文

计算机图形学——八分法中点画圆_圆的中心算法八分法画圆子函数

圆的中心算法八分法画圆子函数

八分法中点画圆

实现方法:从0°到45°开始画,其余部分进行求对称

1 、绘制X^2+Y^2=R^2的圆,将圆划分为⑧等份。我们从第二份开始绘制

分析:

最大位移方向是Y方向,因此令y每增加1,x不变或者减少1,我们可以令:

2 、构造判别式

分析:

将M(xi-0.5,yi+1)点代入圆的稳式方程F(x,y)=X^2+Y^2-R^2

所以d=F(M)=(xi-0.5)^2+(yi+1)^2-R^2

由图可以分析:

可知当d<0时如图所示,在圆内,所以选择Pd


d>=0时,在圆外,所以选择Pu


3、求d的增量

分析:

当d<0时,取Pd

d1=F(M1)=(xi-0.5)^2+(yi+1)^2-R^2

d2=F(M2)=(xi-0.5)^2+(yi+2)^2-R^2

detad=d2-d1=2y+3


当d>=0时,取Pu

d1=F(M1)=(xi-0.5)^2+(yi+1)^2-R^2

d2=F(M2)=(xi-1.5)^2+(yi+2)^2-R^2

detad=d2-d1=2(yi-xi)+5


4、求d的初始值

分析:

d0=F(M0)=(R-0.5)^2+1-R^2=1.25-R


5、总结上述

分析:

d0=1.25-R

当d>=0时,取Pu:

detad=2(yi-xi)+5

x(i+1)=xi-1

y(i+1)=yi+1

当d<0时,取Pd:

detad=2y+3

x(i+1)=xi

y(i+1)=yi+1


6、matlab实现

主函数:(写的繁琐了,不过原理很简单)

  1. clc;
  2. clear all;
  3. close all;
  4. r=500;
  5. X2=[];
  6. Y2=[];
  7. X1=[];
  8. Y1=[];
  9. d=1.25-r;
  10. x=r;
  11. y=0;
  12. for i=1:r/sqrt(2)+1
  13. X2(i)=x;
  14. Y2(i)=y;
  15. if(d<0)
  16. d=d+2*y+3;
  17. x=x;
  18. y=y+1;
  19. else
  20. d=d+2*(y-x)+5;
  21. x=x-1;
  22. y=y+1;
  23. end
  24. end
  25. for i=1:r/sqrt(2)+1
  26. X1(i)=xzuobiao(X2(i),Y2(i));
  27. Y1(i)=yzuobiao(X2(i),Y2(i));
  28. end
  29. X3=X2;
  30. Y3=-Y2;
  31. X4=X1;
  32. Y4=-Y1;
  33. X5=-X1;
  34. Y5=-Y1;
  35. X6=-X2;
  36. Y6=-Y2;
  37. X7=-X2;
  38. Y7=Y2;
  39. X8=-X1;
  40. Y8=Y1;
  41. plot(X1,Y1);
  42. hold on;
  43. plot(X2,Y2);
  44. hold on;
  45. plot(X3,Y3);
  46. hold on;
  47. plot(X4,Y4);
  48. hold on;
  49. plot(X5,Y5);
  50. hold on;
  51. plot(X6,Y6);
  52. hold on;
  53. plot(X7,Y7);
  54. hold on;
  55. plot(X8,Y8);
  56. title('R=500')

子函数:

第1区域的对称x点

  1. function [XX]=xzuobiao(xx,yy)
  2. syms Y X%先求垂足坐标
  3. EQ1=(Y-yy)+(X-xx);%垂直
  4. EQ2=X-Y;%在直线上
  5. [XC YC]=solve(EQ1,EQ2);
  6. XC2=double(XC);%垂足坐标
  7. YC2=double(YC);
  8. XX=2*XC2-xx;%利用中点公式求对称点
  9. YY=2*YC2-yy;%利用中点公式求对称点

第1区域的对称y点

  1. function [YY]=yzuobiao(xx,yy)
  2. syms Y X%先求垂足坐标
  3. EQ1=(Y-yy)+(X-xx);%垂直
  4. EQ2=X-Y;%在直线上
  5. [XC YC]=solve(EQ1,EQ2);
  6. XC2=double(XC);%垂足坐标
  7. YC2=double(YC);
  8. XX=2*XC2-xx;%利用中点公式求对称点
  9. YY=2*YC2-yy;%利用中点公式求对称点

7、算法效果

如有错误,欢迎指正!

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/711392
推荐阅读
相关标签
  

闽ICP备14008679号