资源描述:
《matlab 求解圆公切线方程 程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、matlab求解圆公切线方程程序 这是前段时间数学模型期末作业 给出两圆的圆心坐标和半径,通过程序给出公切线方程现在我已经发现这个程序有一些bug,当外公切成某一角度的时候,将不能正确给出切线方程,而且图像给出的也不是非常的理想。下面是我论文中的摘要部分:两个圆之间的位置关系主要包括相切、相离、包含等,在本文说明的模型中,我们主要利用几何中关于图形相似求比例,已知两点坐标求距离,以及直线角度和直线上点的相互关系等知识,研究了求解两圆之间公切线的算法。为了使算法简洁易懂并且使程序具有更好的可读性,我们还在求解的同时
2、结合了几何和代数方法。其中几何方法严格按照图形推导,使算法清晰直观,充分反应了图形的特点;而代数方法利用图形的普遍性,避开了几何方法中需要根据图形的差异而要分类讨论的复杂情况。再结合了两方面的优点后,我们完成了对公切线方程求解的算法设计。对于相对复杂的情况,我们采用了分类讨论的方法进行处理,最后整合到同一个模型中。最后模型实现了通过输入两个圆的圆心坐标与半径,程序顺利给出其公切线方程,以及公切线类型和条数,并且演示出具体输入数据的圆和公切线的坐标平面图 以下是程序部分functioncircle(x,y,r)ji
3、ao=0:pi/100:2*pi;r1=input('请填入第一个圆的半径'); ifr1>0 a=1; elsea=0; endwhile a==0 r1=input('输入错误,请输入一个正确的半径'); ifr1>0 a=1; elsea=0; endendr2=input('请填入第二个圆的半径'); ifr2>0 a=1; elsea=0; endwhile a==0 r2=input('输入错误,请输入一个正确的半径'); ifr2>0 a=1; elsea=0;
4、endend x1=input('请输入第一个圆的横坐标'); y1=input('请输入第一个圆的纵坐标'); x2=input('请输入第二个圆的横坐标'); y2=input('请输入第二个圆的纵坐标');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为内公切线与水平坐标的夹角 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为其中一条内切线的直线方程') y=k1*x+b1; plot(x,y) elseX1=Qx disp('X1为内切线方程之一,与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为其中一条内切线的直线方程') y=k2*x+b2; plot(x,y) el