プログラミングのお題スレ Part14at TECHプログラミングのお題スレ Part14 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト150:デフォルトの名無しさん 19/05/27 12:03:51.40 g1o9JmK9.net >>146 多分正解だね。 おめでとう。 151:デフォルトの名無しさん 19/05/27 12:17:08.10 g1o9JmK9.net >>146 あ、でも 右上の頂点は y = 998.9995044215 となってるけど、 正確には y=999 とぶつからなければいけないよね。 少し誤差が大きすぎるような気がするけどこんなもの? 152:デフォルトの名無しさん 19/05/27 23:46:29.70 FhcziIHI.net >>140 この図の(388,157)は(388,598)の誤記? 153:デフォルトの名無しさん 19/05/27 23:59:39.40 WucVzOyp.net >>149 間違っていないでしょ。 両方あるよ。 xys [[136 577] [110 927] [472 199] [157 808] [388 598] *** [ 94 31] [388 157] *** [325 409] [787 897] [850 598]] https://i.imgur.com/9emHzzD.jpg 154:デフォルトの名無しさん 19/05/28 00:07:34.28 A9u6a3RO.net >>145 凸包の一辺(94,31)-(110,927)のみに着目し、この辺が垂直となる様に座標を1.023°回転して から点郡を囲む矩形領域を求め、その長方形を正方形になるように短い辺を伸ばす処理は省いて 長方形のまま元の座標系に逆変換し4頂点座標を見たところ、 use List::Util qw{min max}; use Math::Trig; @X = qw{94 110}; # 787 850 472 388}; @Y = qw{31 927}; # 897 598 199 598}; sub sp {$_[0]*$_[2] + $_[1]*$_[3]} for $i (0..@X-2) { for $j ($i+1..$#X) { ($dx, $dy) = ($X[$j] - $X[$i], $Y[$j] - $Y[$i]); ($dx, $dy) = (-$dx, -$dy) if $dx < 0; $th = $dx > abs($dy) ? -atan2($dy, $dx) : atan2($dx, $dy); @e = (cos $th, -sin $th); @f = (sin $th, cos $th); my @x = map{sp @e, $X[$_], $Y[$_]} 0..$#X; my @y = map{sp @f, $X[$_], $Y[$_]} 0..$#Y; @x = (min(@x), max @x); @y = (min(@y), max @y); $w = max($x[1] - $x[0], $y[1] - $y[0]); ($e[1], $f[0]) = (-$e[1], -$f[0]); @x = map{sp @e, $x[$_], $y[$_]} 0,1,0,1; @y = map{sp @f, $x[$_], $y[$_]} 0,0,1,1; #next if min@x<0 or 999<max@x or min@y<0 or 999<max@y; push @t, +{i,$i,j,$j,dx,$dx,dy,$dy,th,$th,X,[@x],Y,[@y],w,$w} } } @t = sort{$$a{w}<=>$$b{w}} @t; do {@x = @{$_->{X}}; @y = @{$_->{Y}}; printf"%d: (%7.3f,%7.3f), (%7.3f,%7.3f), (%7.3f,%7.3f), (%7.3f,%7.3f): w=%7.3f, th=%7.3f°\n", ++$k,$x[0],$y[0],$x[1],$y[1],$x[2],$y[2],$x[3],$y[3],$$_{w},rad2deg $$_{th}} for @t; ~ $ perl 14_11_2.pl 1: ( 94.000, 30.990), (110.000, 30.990), ( 94.000,926.704), (110.000,926.704): w=896.143, th= 1.023° となったので、今のところ計算は合っていると思う。おかしく感じたのは長方形を正方形になるように短い辺を伸ばした座標の シフトによるものだと思う。しかし、この長方形⇒正方形補正が曲者で、より小さい正方形であるにもかかわらず長方形の 短辺を両側に均等に伸ばすと頂点が0~999の範囲をこえてしまうものがあるらしく、不均等に伸ばすようにすれば より小さい正方形を見出せるかもしれない。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch