八分法中点画圆 实现方法:从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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 clc; clear all; close all; r=500 ; X2=[]; Y2=[]; X1=[]; Y1=[]; d=1.25 -r; x=r; y=0 ;for i =1 :r/sqrt (2 )+1 X2(i )=x; Y2(i )=y; if (d<0 ) d=d+2 *y+3 ; x=x; y=y+1 ; else d=d+2 *(y-x)+5 ; x=x-1 ; y=y+1 ; end end for i =1 :r/sqrt (2 )+1 X1(i )=xzuobiao(X2(i ),Y2(i )); Y1(i )=yzuobiao(X2(i ),Y2(i ));end X3=X2; Y3=-Y2; X4=X1; Y4=-Y1; X5=-X1; Y5=-Y1; X6=-X2; Y6=-Y2; X7=-X2; Y7=Y2; X8=-X1; Y8=Y1;plot (X1,Y1);hold on;plot (X2,Y2);hold on;plot (X3,Y3);hold on;plot (X4,Y4);hold on;plot (X5,Y5);hold on;plot (X6,Y6);hold on;plot (X7,Y7);hold on;plot (X8,Y8); title('R=500' )
子函数:
第1区域的对称x点
1 2 3 4 5 6 7 8 9 function [XX] =xzuobiao (xx,yy) syms Y X EQ1=(Y-yy)+(X-xx); EQ2=X-Y; [XC YC]=solve(EQ1,EQ2); XC2=double(XC); YC2=double(YC); XX=2 *XC2-xx; YY=2 *YC2-yy;
第1区域的对称y点
1 2 3 4 5 6 7 8 9 function [YY] =yzuobiao (xx,yy) syms Y X EQ1=(Y-yy)+(X-xx); EQ2=X-Y; [XC YC]=solve(EQ1,EQ2); XC2=double(XC); YC2=double(YC); XX=2 *XC2-xx; YY=2 *YC2-yy;
7、算法效果
如有错误,欢迎指正!