`rm cluster.txt`; `rm dist.txt`; # www.datashaping.com/regress.shtml for details $cluster=0; &seed(1,1); $cluster++; &seed(-25,-25); &distance(); #-------------------------------------------------------------------- sub distance { @px=(); @py=(); @pz=(); open (IN,") { $i=~s/\n//g; @lu=split(/\t/,$i); $px[$k]=$lu[1]; $py[$k]=$lu[2]; $pz[$k]=$lu[0]; $k++; } close(IN); $kmax=$k; for ($i=0; $i<100; $i++) { # pick up 2 points k1, k2 $k1=int(rand($kmax)); $k2=int(rand($kmax)); #compute distance $dist=sqrt(($px[$k1]-$px[$k2])**2 + ($py[$k1]-$py[$k2])**2); if ($pz[$k1]==$pz[$k2]) { $dclass=0; } else { $dclass=1; } print "$dclass\t$dist\n"; $qdist[$i]=$dist; $qclass[$i]=$dclass; } open(OUT,">dist.txt"); for ($i=0; $i<100; $i++) { print OUT "$qclass[$i]\t$qdist[$i]\n"; } close(OUT); } #-------------------------------------------------------------------- sub seed { local($x,$y)=@_; $kmax=1000; $x=rand($x)-0.5; $y=rand($y)-0.5; #print "==$x == $y\n"; for ($k=0; $k<$kmax; $k++) { $x=$x+rand($1)-0.5; $y=$y+rand($1)-0.5; $px[$k]=$x; $py[$k]=$y; # print "$x === $y\n"; } open(OUT,">>cluster.txt"); for ($k=0; $k<$kmax; $k++) { print OUT "$cluster\t$px[$k]\t$py[$k]\n"; } close(OUT); }