在9个点上画10条直线,要求每条直线上有三个点或三个以上?
标签:
9个点10条线it |
分类: 逻辑题 |
在9个点上画10条直线,要求每条直线上有三个点或三个以上?
解答:
简单的示例:
http://s11/small/637ed3bcgbea9dba676ea&690
求解思路:
假设9个点的坐标分别为(xi,yi) i=1,2,3…9,第i个点(xi,yi)简记为Pi
由于每条直线上至少有三个点,将这样的三个点记为一组,用集合表示,记作{Pi,Pj,Pk}
写出这样的10个集合,满足任意两个集合的交集只能有一个点,否则这两个集合对应的两条直线重合。
下面写出了12个集合。可满足上述条件。这个很容易找到。
{P1, P2, P3}
{P4, P5, P6}
{P7, P8, P9}
{P1,P4,P7}
{P2,P5,P8}
{P3,P6,P9}
{P1,P6,P8}
{P2,P4,P9}
{P3,P5,P7}
{P2,P6,P7}
{P3,P4,P8}未使用
{P1,P5,P9}未使用
取前十组,对于每个集合{Pi,Pj,Pk}列出方程组:
(xi-xk)*(yj-yk)=(xj-xk)*(yi-yk)
可以得到10个非线性方程组。
另外设x1=0,y1=0,x2=0,y2=1
9个点对应了18个未知数。
使用matlab求解方程组可以得到9个点的坐标,并用matlab绘图如下:
http://hiphotos.baidu.com/tengzhao201/pic/item/9a0b2ccd7cd98d1001fb0188213fb80e7aec90b7.jpg
附件:
Matlba源码:
P9L10.m
lineinfo=[
1,2,3
4,5,6
7,8,9
1,4,7
2,5,8
3,6,9
1,6,8
2,4,9
3,5,7
2,6,7
]
%3,4,8未用
%1,5,9未用
a=solve('x1=0','x2=0','y1=0','y2=1','(x3-x1)*(y2-y1)=(x2-x1)*(y3-y1)','(x5-x4)*(y6-y4)=(x6-x4)*(y5-y4)','(x8-x7)*(y9-y7)=(x9-x7)*(y8-y7)','(x4-x1)*(y7-y1)=(x7-x1)*(y4-y1)','(x5-x2)*(y8-y2)=(x8-x2)*(y5-y2)','(x6-x3)*(y9-y3)=(x9-x3)*(y6-y3)','(x5-x3)*(y7-y3)=(x7-x3)*(y5-y3)','(x4-x2)*(y9-y2)=(x9-x2)*(y4-y2)','(x6-x2)*(y7-y2)=(x7-x2)*(y6-y2)','(x6-x1)*(y8-y1)=(x8-x1)*(y6-y1)')
%可以得到所有的合理的2组解集
x6=7
x7=8
x8=9
y3=11
y4=12
y5=10
y6=2
y7=3
y8=4
y9=5
x_val=[]
y_val=[]
x_val(:,1)=subs(a.x1);
x_val(:,2)=subs(a.x2);
x_val(:,3)=subs(a.x3);
x_val(:,4)=subs(a.x4);
x_val(:,5)=subs(a.x5);
x_val(:,6)=subs(a.x6);
x_val(:,7)=subs(a.x7);
x_val(:,8)=subs(a.x8);
x_val(:,9)=subs(a.x9);
x_val
y_val(:,1)=subs(a.y1);
y_val(:,2)=subs(a.y2);
y_val(:,3)=subs(a.y3);
y_val(:,4)=subs(a.y4);
y_val(:,5)=subs(a.y5);
y_val(:,6)=subs(y6);
y_val(:,7)=subs(y7);
y_val(:,8)=subs(y8);
y_val(:,9)=subs(y9);
y_val
ssize=size(x_val(:,1));
rows=ssize(1);
for solve_i=1:rows
data(:,1)=x_val(solve_i,:)';
data(:,2)=y_val(solve_i,:)';
data
plotline(lineinfo,data)
end
plotline.m
function [output_args ] = plotline( lineinfo,data )
% lineinfo 连接的点的编号,编号对应data的行号
% data 每个点的x,y坐标
figure;
a=size(lineinfo);
rows=a(1);
hold on;
x=[]
y=[]
dr=0.5
for i=1:rows
line_i=lineinfo(i,:);
x(1)=data(line_i(1),1)
x(2)=data(line_i(2),1)
x(3)=data(line_i(3),1)
y(1)=data(line_i(1),2)
y(2)=data(line_i(2),2)
y(3)=data(line_i(3),2)
text(x(1)+dr,y(1)+dr,num2str(line_i(1)));
text(x(2)+dr,y(2)+dr,num2str(line_i(2)));
text(x(3)+dr,y(3)+dr,num2str(line_i(3)));
plot(x,y,'-o');
end
问题发散:
在9个点上画11条直线,要求每条直线上至少有三个点。
同样可以列出方程求解,但是发现只有复数解。(说明在二维平面是无解的)
在9个点上画12条直线,要求每条直线上至少有三个点。
同样可以列出方程求解,也发现只有复数解。(说明在二维平面是无解的)

加载中…