私有方法只能被类中的其他方法调用。继续使用1.4.5小节的实例,给ccircle类添加一个具有6个数据输入参数的构造函数,定义用圆上3点绘圆。利用圆上3点,可以求得圆心坐标,于是利用圆上3点绘圆的问题可以转化为利用圆心和圆上一点绘圆的问题,并最终转化为利用圆心坐标和半径绘圆的问题。这里,利用圆上3点求圆心坐标的过程可以用一个私有方法centerthreep进行定义。因为这个方法只被类的构造函数调用,所以它是私有的。
code.matlab
methods(Access=private)
function [x0,y0]=centerthreep(x1,y1,x2,y2,x3,y3)
%利用圆上3点求圆心坐标
a1=x1-x3;
b1=y1-y3;
a2=x2-x3;
b2=y2-y3;
c1=(x1*x1-x3*x3+y1*y1-y3*y3)/2;
c2=(x2*x2-x3*x3+y2*y2-y3*y3)/2;
d=a1*b2-a2*b1;
if(d==0)
error('找不到圆心')
else
x0=(c1*b2-c2*b1)/d;
y0=(a1*c2-a2*c1)/d;
end
end
end
然后在构造函数中调用此私有方法。
code.matlab
methods
function cc=ccircle(varargin)
%ccircle类的构造函数
%cc=ccircle(CenterX,CenterY,Radius)
switch nargin
case 0
%如果没有输入参数,创建一个默认对象
……
case 1
%如果有一个参数,返回它
……
case 3
%已知圆心和半径绘圆
……
case 4
%已知圆心和圆上一点绘圆
……
case 6
%已知圆上三点绘圆
[x0,y0]=centerthreep(varargin(1),varargin(2),varargin(3),varargin(4),varargin(5),varargin(6));
cc.centerx=x0;
cc.centery=y0;
rad=((x0-varargin(1))^2+(y0-varargin(2))^2)^(1/2);
cc.radius=rad;
otherwise
error('参数个数错误')
end
end
end