資源描述:
《matlab 求解圓公切線方程 程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、matlab求解圓公切線方程程序?這是前段時(shí)間數(shù)學(xué)模型期末作業(yè)?給出兩圓的圓心坐標(biāo)和半徑,通過程序給出公切線方程現(xiàn)在我已經(jīng)發(fā)現(xiàn)這個(gè)程序有一些bug,當(dāng)外公切成某一角度的時(shí)候,將不能正確給出切線方程,而且圖像給出的也不是非常的理想。下面是我論文中的摘要部分:兩個(gè)圓之間的位置關(guān)系主要包括相切、相離、包含等,在本文說明的模型中,我們主要利用幾何中關(guān)于圖形相似求比例,已知兩點(diǎn)坐標(biāo)求距離,以及直線角度和直線上點(diǎn)的相互關(guān)系等知識(shí),研究了求解兩圓之間公切線的算法。為了使算法簡潔易懂并且使程序具有更好的可讀性,我們還在求解的同時(shí)
2、結(jié)合了幾何和代數(shù)方法。其中幾何方法嚴(yán)格按照?qǐng)D形推導(dǎo),使算法清晰直觀,充分反應(yīng)了圖形的特點(diǎn);而代數(shù)方法利用圖形的普遍性,避開了幾何方法中需要根據(jù)圖形的差異而要分類討論的復(fù)雜情況。再結(jié)合了兩方面的優(yōu)點(diǎn)后,我們完成了對(duì)公切線方程求解的算法設(shè)計(jì)。對(duì)于相對(duì)復(fù)雜的情況,我們采用了分類討論的方法進(jìn)行處理,最后整合到同一個(gè)模型中。最后模型實(shí)現(xiàn)了通過輸入兩個(gè)圓的圓心坐標(biāo)與半徑,程序順利給出其公切線方程,以及公切線類型和條數(shù),并且演示出具體輸入數(shù)據(jù)的圓和公切線的坐標(biāo)平面圖?以下是程序部分functioncircle(x,y,r)ji
3、ao=0:pi/100:2*pi;r1=input('請(qǐng)?zhí)钊氲谝粋€(gè)圓的半徑');?ifr1>0???a=1;?elsea=0;?endwhile?a==0???r1=input('輸入錯(cuò)誤,請(qǐng)輸入一個(gè)正確的半徑');????ifr1>0???a=1;?elsea=0;?endendr2=input('請(qǐng)?zhí)钊氲诙€(gè)圓的半徑');?ifr2>0???a=1;?elsea=0;?endwhile?a==0???r2=input('輸入錯(cuò)誤,請(qǐng)輸入一個(gè)正確的半徑');????ifr2>0???a=1;?elsea=0;?
4、endend???x1=input('請(qǐng)輸入第一個(gè)圓的橫坐標(biāo)');???y1=input('請(qǐng)輸入第一個(gè)圓的縱坐標(biāo)');???x2=input('請(qǐng)輸入第二個(gè)圓的橫坐標(biāo)');???y2=input('請(qǐng)輸入第二個(gè)圓的縱坐標(biāo)');x=x1+r1*cos(jiao);y=y1+r1*sin(jiao);plot(x,y)axisequal?holdx=x2+r2*cos(jiao);y=y2+r2*sin(jiao);plot(x,y)axisequal???L=sqrt((x1-x2).^2+(y1-y2).^2)
5、;ifx1==x2???alpha=pi/2;%alpha為圓心連線與水平的夾角???elsealpha=atan((y2-y1)/(x2-x1));endifr1+r2<=L???A=asin((r1+r2)/L);???oq=r1*L/(r1+r2);???c1=alpha+A;%c為內(nèi)公切線與水平坐標(biāo)的夾角???c2=alpha-A;???ifx1<=x2???Qx=x1+oq*cos(alpha);???Qy=y1+oq*sin(alpha);???elseQx=x2+oq*cos(alpha);????
6、????Qy=y2+oq*sin(alpha);???end???ifc1~=pi/2&c1~=3*pi/2&c1~=-pi/2&c1~=-3pi/2;???????k1=tan(c1);???????b1=Qy-Qx*tan(c1);???????s1='y=';???????s1=strcat(s1,num2str(k1),'x');???????ifb1>=0?????????s1=strcat(s1,'+');???????end???????s1=strcat(s1,num2str(b1))??????
7、?disp('s1為其中一條內(nèi)切線的直線方程')???????y=k1*x+b1;???????plot(x,y)???elseX1=Qx???????disp('X1為內(nèi)切線方程之一,與x軸垂直')???????x=[Qx,Qx];???????y=[-9,9];???????plot(x,y)???end???ifc2~=pi/2&c2~=3*pi/2&c2~=-pi/2&c2~=-3pi/2;???????k2=tan(c2);???????b2=Qy-Qx*tan(c2);???????s2='y=';?
8、??????s2=strcat(s2,num2str(k2),'x');???????ifb2>=0?????????s2=strcat(s2,'+');???????end???????s2=strcat(s2,num2str(b2))???????disp('s2為其中一條內(nèi)切線的直線方程')???????y=k2*x+b2;???????plot(x,y)???el