加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在9个点上画10条直线,要求每条直线上有三个点或三个以上?

(2012-04-27 22:16:53)
标签:

9个点10条线

it

分类: 逻辑题

在9个点上画10条直线,要求每条直线上有三个点或三个以上?

解答:

简单的示例:

http://s11/small/637ed3bcgbea9dba676ea&690

 

求解思路:

假设9个点的坐标分别为(xi,yi) i=1,2,39,第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条直线,要求每条直线上至少有三个点。

同样可以列出方程求解,也发现只有复数解。(说明在二维平面是无解的)



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有