网页资讯贴吧知道视频音乐图片地图文库
进入贴吧全吧搜索吧内搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月16日漏签0天
人工智能编程吧 关注:25,648贴子:344,574
  • 看贴

  • 图片

  • 精品

  • 视频

  • 游戏

  • 1 2 3 4 下一页 尾页
  • 59回复贴,共4页
  • ,跳到 页  
<<返回人工智能编程吧
>0< 加载中...

【问题】关于正方形纸上随意扔3个点形成锐角三角形的概率

  • 只看楼主
  • 收藏

  • 回复
  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1L。


  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我通过计算得到锐角的概率是75%。
然后自己写了个程序,发现有问题。


  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
program dreiecke;
var n:integer;
x1i,y1i,x2i,y2i,x3i,y3i:integer;
x1,y1,x2,y2,x3,y3:real;
d1,d2,d3,d1s,d2s,d3s:real;
c1,c2,c3,c0,cc,pd:longint;

function distance(x1d,y1d,x2d,y2d:real):real;
var xd,yd:real;
begin
xd:=x2d-x1d;
yd:=y2d-y1d;
distance:=sqrt(xd*xd+yd*yd);
end;

function senkend(x1s,y1s,x2s,y2s,x3s,y3s:real):real;
var ax0,by0,c,d:real;
begin
ax0:=+(y2s-y1s)*x3s;
by0:=-(x2s-x1s)*y3s;
c:=(x2s-x1s)*y1s-(y2s-y1s)*x1s;
d:=distance(x1s,y1s,x2s,y2s);
if d=0 then senkend:=0 else senkend:=(ax0+by0+c)/d;
senkend:=abs(senkend);
end;


begin
readln(n);
for x1i:=1 to n do
for y1i:=1 to n do
for x2i:=1 to n do
for y2i:=1 to n do
for x3i:=1 to n do
for y3i:=1 to n do
begin
x1:=x1i/n;
y1:=y1i/n;
x2:=x2i/n;
y2:=y2i/n;
x3:=x3i/n;
y3:=y3i/n;
d1:=distance(x2,y2,x3,y3);
d2:=distance(x1,y1,x3,y3);
d3:=distance(x1,y1,x2,y2);
d1s:=senkend(x2,y2,x3,y3,x1,y1);
d2s:=senkend(x1,y1,x3,y3,x2,y2);
d3s:=senkend(x1,y1,x2,y2,x3,y3);
pd:=1;
if d1s>d2 then pd:=3;
if d1s>d3 then pd:=3;
if d2s>d1 then pd:=3;
if d2s>d3 then pd:=3;
if d3s>d1 then pd:=3;
if d3s>d2 then pd:=3;
if d1s=d2 then pd:=2;
if d1s=d3 then pd:=2;
if d2s=d1 then pd:=2;
if d2s=d3 then pd:=2;
if d3s=d1 then pd:=2;
if d3s=d2 then pd:=2;
if d1s=0 then pd:=0;
if d2s=0 then pd:=0;
if d3s=0 then pd:=0;
if pd=0 then c0:=c0+1;
if pd=1 then c1:=c1+1;
if pd=2 then c2:=c2+1;
if pd=3 then c3:=c3+1;
end;
cc:=c0+c1+c2+c3;
writeln(100*c0/cc);
writeln(100*c1/cc);
writeln(100*c2/cc);
writeln(100*c3/cc);
writeln(100*(c0+c1)/cc);
writeln(100*(c2+c3)/cc);
writeln('finished');
readln;
end.

其中:
distance是测得两点间距离的函数。
senkend是测得一点到另外两点连成直线的距离的函数。



  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
n=5时测得锐角=80%
n=10时测得锐角=90%
n=14时测得锐角=95%


  • 文远奉先
  • 大凡金属
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你可以用勾股定理来检查是否锐角三角形。


  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
根据5L的提示,我把程序变了一下。
这次的结果又出人意料。
n=2时和原结果一样,但n>2时锐角的概率上升。
奇怪的是锐角的概率不是单调上升的在某些值的时候会出现反弹。
最诡异的是直角的概率(理论上为0),有时为2%有时为5%,貌似和奇偶有关?


  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
program dreiecke2;
var n:integer;
x1i,y1i,x2i,y2i,x3i,y3i:integer;
x1,y1,x2,y2,x3,y3:real;
d1,d2,d3,d1s,d2s,d3s:real;
c1,c2,c3,c0,cc,pd:longint;


begin
readln(n);
for x1i:=1 to n do
for y1i:=1 to n do
for x2i:=1 to n do
for y2i:=1 to n do
for x3i:=1 to n do
for y3i:=1 to n do
begin
x1:=x1i/n;
y1:=y1i/n;
x2:=x2i/n;
y2:=y2i/n;
x3:=x3i/n;
y3:=y3i/n;
d1:=(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2);
d2:=(x3-x1)*(x3-x1)+(y3-y1)*(y3-y1);
d3:=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
d1s:=d2+d3-d1;
d2s:=d1+d3-d2;
d3s:=d1+d2-d3;
pd:=1;
if d1s<0 then pd:=3;
if d2s<0 then pd:=3;
if d3s<0 then pd:=3;
if d1s=0 then pd:=2;
if d2s=0 then pd:=2;
if d3s=0 then pd:=2;
if pd=1 then c1:=c1+1;
if pd=2 then c2:=c2+1;
if pd=3 then c3:=c3+1;
end;
cc:=c0+c1+c2+c3;
writeln('rs ',100*c1/cc);
writeln('rt ',100*c2/cc);
writeln('rd ',100*c3/cc);
writeln('finished');
readln;
end.



  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
5
rs 2.3193600000000000E+0001
rt 2.1587200000000000E+0001
rd 5.5219200000000000E+0001


10
rs 2.5896000000000000E+0001
rt 5.6488000000000000E+0000
rd 6.8455200000000000E+0001


14
rs 2.7184623328715076E+0001
rt 2.4964619333780993E+0000
rd 7.0318914737906825E+0001





  • 贴吧用户_0Ry4U3N
  • 大凡金属
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这题我出过


  • 文远奉先
  • 大凡金属
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
n趋近无穷大时,这个概率应该有个极限的。


  • 人工智能编程1
  • 大凡金属
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我实测数据,20*20矩形,锐角三角形约70%,呈现明显的渐近线趋势,75%的结果也许对的!希望其他人再试对比!


  • 人工智能编程1
  • 大凡金属
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我的实测结果,从2到30构成数对:
2 0 3 38 4 50 5 56 6 60 7 62 8 64 9 65 10 66 11 67 12 68 13 68 14 69 15 69 16 70 17 70 18 70 19 70 20 70 21 71 22 71 23 71 24 71 25 71 26 71 27 71 28 71 29 71 30 71 。。。


  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我的第二个程序显示钝角大概是70%。虽然和我的计算不符,但我更倾向于这个答案是对的。


  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
过两天我用vb写,顺带改进一下算法。估计vb运行得会快一点(pas只允许64K的内存,空间复杂度不能太高。)


  • ax_pokl
  • 大凡金属
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
试一下久违的int64?


扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 4 下一页 尾页
  • 59回复贴,共4页
  • ,跳到 页  
<<返回人工智能编程吧
分享到:
©2021 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示