纯净水厂转让:怎样判断六个点中美三点不共线?

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 08:00:37
这六个点的坐标已经存入X,Y两个数组,要求判断是否有三点共线,若有则输出1,若没有则输出0
有大侠能写下程序吗?原理我也清楚,最好不要用循环,用C或者MATLAB,最好用MATLAB用矩阵,我可以给高分

function r=having_three_points_on_common_line(x,y)
%x and y are vectors having same length
%length of the vector should not be too long

ii=nchoosek(1:length(x),3);
xx=x(ii);
yy=y(ii);
cc=((yy(:,2)-yy(:,1)).*(xx(:,3)-xx(:,1))-(xx(:,2)-xx(:,1)).*(yy(:,3)-yy(:,1)));

r=any(cc==0);

function [yy,point]=is_collinears(x,y)
n=length(x);
if n~=length(y)
error('点的坐标个数不匹配.');
end
[px,jx]=sort(x);
py=y(jx);
plot(px,py);

set=combntns(1:n,3);%任取三个点,取出所有可能的三点组合
x1=x(set);
y1=y(set);
test=((y1(:,2)-y1(:,1)).*(x1(:,3)-x1(:,1))-(x1(:,2)-x1(:,1)).*(y1(:,3)-y1(:,1)));
% test 为计算取出的三点斜率是否相等,相等即为0
yy=any(test==0); % 寻找test中是否有0,若有则yy=1,否则yy=0
test=test';
if nargout>1 % 输出哪些点共线
if yy~=1
point=[];
disp('没有共线的点。');
else
tem=find(test==0);
point=set(tem,:);
end
end

给你提供个思路,不一定是最好的
没两点建立一个直线,其他的点代入直线方程,看看在这条直线上不
总共要建立15个方程

希望对你有帮助

分别用每个点为坐标原点建立坐标系,然后计算与其它5个点对应的直线的斜率 看是否有相同,

可以用循环控制
这里可能遇到循环小数问题

楼下的两个回答简洁明了,我就不献丑了。