プログラミングの為の数学と算数 vol.2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG語りましょう。TIPS/Q&Aスレです。
0697デフォルトの名無しさん
2007/01/31(水) 13:38:16もし論文なんかで出したら一笑されるぞ。
少数観測点からデータを復元する話は GPS などの位置計測で
よくある話で、そういう場合にまともな推定をしようとすれば
観測点の状態が分かってることが必要になる。
たとえば、真の値からのずれがある確率分布に従うと仮定を
置けば、最尤推定などによって最もそれっぽい場所が出る。
正規分布に従うと仮定してよい場合は最尤推定は最小自乗法に
一致するため、多くの GPS ではこの仮定を(知ってか知らずか)置いている。
多量のデータで最小自乗法が有効なのは、中心極限定理によって
分布が正規分布に漸近するため。
0698691
2007/01/31(水) 13:40:21>★最小2乗法による円弧推定
ってそのまんまのタイトルがあった。
3点から円を求めるのもこのページから見つけたのに気付かなかったOTL
0699691
2007/01/31(水) 13:43:33>何も考えずにたった4点で最小二乗法をやるのは馬鹿げてる。
>もし論文なんかで出したら一笑されるぞ。
了解、納得でつ。
必ずしも円になるのか分からないデータの解析なので、
逆にデータ解析結果から観測点が円にならないという結論を出しますが。
ある部分は円、ある部分は円にならず従って応力受けてる、みたいな。
0700デフォルトの名無しさん
2007/01/31(水) 13:48:36これはいえない。最小自乗法では円にならなくても、ほかの方法では
円になる場合があるかもしれない。
0701699
2007/01/31(水) 13:57:36じゃあ、ほかの方法教えて。
ところで、
>★最小2乗法による円弧推定
を読んだら、
>この3つの方程式を解けば良い.
で終わってる。
解かないといけないのか。
0702デフォルトの名無しさん
2007/01/31(水) 14:12:46上で述べられていた任意の三点の中心の平均や重心は有力。
また、697 で述べたように、最尤推定はひとつの別の方法。
ほかにも最小自乗や最尤推定を部分に含むが、適当な
ペナルティ関数を設定して最小化問題として解く手もある。
最尤推定やペナルティ法は、円になるかどうか分からないものの
判定なら、おそらく最小自乗を用いるよりも良い結果が得られる。
(最小自乗では、一直線上のデータは半径が(ほぼ)無限大の円と
判断されるが、通常の応用ではそれを弾きたいことが多い)
0703701
2007/01/31(水) 14:33:09これらはライブラリにもなってなさそうだね。
実装難しそう...
0704701
2007/01/31(水) 18:42:23>2a( X*Y/N -XY)+ 2b(Y*Y/N -YY) =Y(YY+XX)/N-YYY-XXY ----2)
>r*r=(XX+YY-2.0(a*X+b*Y) )/N+a*a+b*b; ----3)
>この3つの方程式を解けば良い.
やっぱこれ何度読んでも分からないんだけど、
4点をどうやって代入するわけでしょうか?
解答が目の前にありながら使いこなせないorz
0705デフォルトの名無しさん
2007/02/01(木) 12:41:01X → 肺i XX → 肺i*xi XXX → 肺i*xi*xi
Y → 輩i YY → 輩i*yi YYY → 輩i*yi*yi
以下略
の意じゃね? xi, yi が配列要素で直線上にない3点が最低限必要と。
0706デフォルトの名無しさん
2007/02/05(月) 17:23:56後は、1) 2)式から a,b2変数の連立一次方程式を解けば中心が求まるでしょ?
それを3)に代入すれば半径も求まる
0707デフォルトの名無しさん
2007/02/14(水) 10:09:264点中 3点で求まる円から、 残った1点までの円からの距離2乗(|中心からの距離-半径|)を出して
それを4つ加算した結果、
またはそれを半径で割って正規化したもの
でいいんじゃないのか?
0708デフォルトの名無しさん
2007/02/28(水) 21:55:010709デフォルトの名無しさん
2007/03/25(日) 15:02:16for(i = 0; i < N; i++) {
int x = cx + sin(i * 2 * PI / N) * (W / 2);
int y = cy + cos(i * 2 * PI / N) * (H / 2);
plot(x, y);
}
ところがというか当然というか、これだと W = H の円の時にしか点が等間隔になりません。
どうしたら良いでしょうか?
知っていなくてはいけない公式などありましたら教えてくださいませ。
0710デフォルトの名無しさん
2007/03/25(日) 15:24:580711デフォルトの名無しさん
2007/03/25(日) 15:26:040712デフォルトの名無しさん
2007/03/25(日) 15:44:51それを等間隔に分割というのは、その厄介な問題に挑戦するという事になる
数式では基本的に解けないから、数値積分で頑張るしかないよ
0713デフォルトの名無しさん
2007/03/25(日) 15:46:43int x = cx + W * cos(i * 2 * PI / N);
int y = cy + H * sin(i * 2 * PI / N);
でどうでっしゃろ?
0714713
2007/03/25(日) 15:47:200715デフォルトの名無しさん
2007/03/25(日) 16:06:21それつかって円周を求めた(ここではLとおく)として
始点(仮に中心からx軸方向に幅/2移動した点としよう)から
円周にそってl ( = n×L, nは適当な実数)分移動したときの座標(x,y)ってのは楽に求まるの?
精度気にしないのならこれでいけると思うんだけど、どうでしょうか?
0716デフォルトの名無しさん
2007/03/25(日) 16:20:25Nの個数を30倍くらいに増やし一度テーブルを作成して
補間で、近似値を求めるのが一番簡単だろう
0717デフォルトの名無しさん
2007/03/25(日) 16:40:25そのテーブルの中味と、
何のデータを元にして、
何の式で補間するか書いてください
お願いします(-∧-)
0718709
2007/03/25(日) 16:51:16>>715 円周に沿って l の座標を求める方法がよくわからないです。すみません。
>>716 で言う方法かはわかりませんが、自分ならこうやりますがどうでしょう?
1. 30N の全ての点の座標を求たテーブルを作る
2. 隣り合う点との距離を三平方の定理で求めることを全ての点について行い、円周の近時値を計算する
3. 円周を N等分した長さを求め、これを当初の N個の頂点間の距離 d とする
4. 30N のテーブル中の頂点の中から、それぞれの点の円周上の位置(始点からの距離)に近いものを選んで点を打つ
0719デフォルトの名無しさん
2007/03/25(日) 16:53:40テーブルの中身:
double ax[N*30];
double ay[N*30];
double aL[N*30];
double L=0;
ax[i] = cx + W * cos(i * 2 * PI / N);
ay[i] = cy + H * sin(i * 2 * PI / N);
if( i != 0 ) L+= hypot(cx-ocx , cy-ocy);
aL[i]=L;
ocx=cx;
ocy=cy;
のテーブルを作るでしょ?
Lを周長の代用として、
c= L*i/N で aL[k]<=c && aL[k+1]<c になる k を見つけて比例で分割して
w = ((c-aL[k]) /(aL[k+1]-aL[k]) + k) :2*Pi/N
を角度にするという感じ
0720デフォルトの名無しさん
2007/03/25(日) 17:04:31>円周に沿って l の座標を求める方法
楕円積分の逆関数だから、楕円関数使って求まる気がする。
もちろん、楕円関数の値は数値的に計算するものだけど。
0721719
2007/03/25(日) 17:13:07double aL[N*30];
double L=0;
for( i=0;i<30*N;i++}{
ax = cx + W * cos(i * 2 * PI / N);
ay = cy + H * sin(i * 2 * PI / N);
if( i != 0 ) L+= hypot(ax-oax , ay-oay);
aL[i]=L;
oax=ax;
oay=ay;
}
次のループは
for( i=0;i<N;i++}{
で while(aL[k]>c) k++;
0722719
2007/03/25(日) 17:16:37ax = cx + sin(i * 2 * PI / N) * (W / 2);
ay = cy + cos(i * 2 * PI / N) * (H / 2);
に訂正、
続き、
w = ((c-aL[k]) /(aL[k+1]-aL[k]) + k)*2*PI/N;
int x = cx + sin(w) * (W / 2);
int y = cy + cos(w) * (H / 2);
plot(x, y);
}
0723709
2007/03/25(日) 17:30:02丁寧にどうもありがとうございます。
よくわかりました。
>>720
まずは楕円積分というのを勉強しなくてはいけなそうです。
おいおいスキルアップしたいと思います。
>>710
よろしければそのスレを教えてもらえないでしょうか。
放物線を速さ一定で進むってのも興味あります。
0724デフォルトの名無しさん
2007/03/25(日) 17:44:59ttp://www.tensyo.com/urame/prog/ALGO.HTM
の後ろの方に計算方法が書いてあったけど
コレは今回の問題には応用できないな
0725しょう
2007/03/25(日) 20:12:390726デフォルトの名無しさん
2007/03/25(日) 20:19:03宿題は他をあたりなさい。
0727デフォルトの名無しさん
2007/03/25(日) 20:22:522) b*6=c*5
1' a*3*5=b*5+c*5
a*3*5=b*5+b*6=b*11
b=a*3*5/11
0728デフォルトの名無しさん
2007/03/25(日) 20:23:340729しょう
2007/03/25(日) 20:27:120730デフォルトの名無しさん
2007/03/25(日) 20:28:17せめて何学年まであるか、一学年何クラスかぐらいはわからないと・・・
0731しょう
2007/03/25(日) 20:31:330732デフォルトの名無しさん
2007/03/25(日) 20:34:090733デフォルトの名無しさん
2007/03/25(日) 20:41:40中学生じゃ解けないよ
大学入って掃き出し法を習うまでとっておきなさい
0734デフォルトの名無しさん
2007/03/25(日) 21:04:47>727間違ってる
1)a*2=b+c
だな。
で、2)はb:c=5:6から出した式ですね
あとは連立方程式
0735デフォルトの名無しさん
2007/03/25(日) 21:31:43俺数学選択で早稲田受かったよ
0736デフォルトの名無しさん
2007/03/25(日) 21:38:140737デフォルトの名無しさん
2007/03/25(日) 21:42:19まぁ政経だけどねwショボいけど
0738デフォルトの名無しさん
2007/03/25(日) 22:12:110739デフォルトの名無しさん
2007/03/26(月) 00:05:29これだった
http://pc11.2ch.net/test/read.cgi/gamedev/1170387853/
0740デフォルトの名無しさん
2007/03/26(月) 00:10:22それを言うなら、 a = (a + b + c) * 1/3 だろ。実際のところ、3学年しかないという前提はどこにもないわけだが。
0741デフォルトの名無しさん
2007/03/26(月) 00:26:09楕円の周長計算、
「使えるだけでいい」という姿勢なら
単に数値計算ライブラリからソースコピればいける気が。
0742デフォルトの名無しさん
2007/03/27(火) 01:25:31http://www.youtube.suppa.jp/?uk5LgzILKQU59%+0kBtqQp0RJf30%+8rTFpttjtSU89%+eKWwj9JoAln29%+OSjDO5IUnWJ14%+amKCPh1YrDR14%+KmClRwiAMOy29%+4gIU8IV2hvR14%+CxM26WyV1_d29%+mIBUzAsDgyE132%+@1@_AutomaticPlay
0743デフォルトの名無しさん
2007/03/27(火) 02:01:51★☆YouTubeのCMを連続動画に☆★
//ame.x0.com/main/070327015730.html
http://ame.x0.com/main/070327015730.html
0744デフォルトの名無しさん
2007/03/28(水) 11:26:380745デフォルトの名無しさん
2007/03/28(水) 11:31:260746デフォルトの名無しさん
2007/03/28(水) 11:37:360747デフォルトの名無しさん
2007/03/28(水) 11:43:15>>689のリンク先のページは見た?
0748デフォルトの名無しさん
2007/03/28(水) 13:40:09その離散点使って、数値積分的なことすれば?
Σ(点から直線への距離 × 傾き)
みたいなのを。
0749デフォルトの名無しさん
2007/03/28(水) 19:00:370750デフォルトの名無しさん
2007/03/28(水) 23:08:36>あ、曲線は自由曲線(ドットというか。。。)です。
ドットを数えろ。
0751デフォルトの名無しさん
2007/03/29(木) 08:38:460752デフォルトの名無しさん
2007/03/29(木) 08:57:37案1、 (点と中心との距離-半径)^2 の平均 ÷ 半径^2
案2、 ( 点と中心との距離^2 - 半径^2 )^2 の平均 ÷ 半径^4
あたりだろう。
0753デフォルトの名無しさん
2007/03/29(木) 14:03:24基準円よりも広いところで円をなす点たちと
基準円上のある点にのみ集中する点たちで
どっちが「円からズレている」かは一概には言えない。
0754デフォルトの名無しさん
2007/03/29(木) 14:22:100755デフォルトの名無しさん
2007/03/29(木) 15:48:26残差自乗みたいな簡単な尺度では「(概形が)円からズレてない」
みたいな位相的な構造はとても捕まえられないはずだけども。
0756デフォルトの名無しさん
2007/03/29(木) 16:07:10指定された円とのズレという量があればそれを最小にする半径、中心も求められるわけで・・・
それとも何か素晴らしいアイデアをお持ちで?
0757デフォルトの名無しさん
2007/03/29(木) 16:33:07だから「ズレている」を定義してくれと言ってるんだけどな。
一点に集中してても「ズレてない」とするなら残差自乗で十分だし、
そうでないならより輪郭線抽出などの手法が要るかもしれない。
0758デフォルトの名無しさん
2007/03/29(木) 16:37:32もう少しややこしくするなら、点同士がどれだけ中心からの角度で分散しているかの数値を入れるかい?
0759デフォルトの名無しさん
2007/03/29(木) 16:44:25だとすれば>750で充分だと思うのだけど。
#目的も判らずに数学的な意味を見出そうとしても虚しいばかりだ。
0760デフォルトの名無しさん
2007/03/29(木) 16:52:340761ラジアンの比較で躓いてます
2007/03/29(木) 16:57:43質問の回答として、以下のコードを教えてもらいました。
v1 … p1→p2 のベクトル
v2 … p2→p3 のベクトル
struct point { double x, y; };
bool isJustLeft(point v1, piont v2)
{
double corssProd = v1.x * v2.y - v1.y * v2.x; //外積
double norm1 = v1.x * v1.x + v1.y * v1.y; // |v1|^2
double norm2 = v2.x * v2.x + v2.y * v2.y; // |v2|^2
if( corssProd < 0.0 ) return false; // 時計回りはダメ
if( crossProd * crossProd == norm1 * norm2 ) return true; // 直角判定
return false;
}
でも、ベクトルの外積って通常3次元のベクトルを返しますよね。上記だと
> double corssProd = v1.x * v2.y - v1.y * v2.x; //外積
とスカラー値を返しているのですが、今一つやっている意味が判りません。
http://yuki.to/math_cgi/prybbs.html?log=3&mode=res&no=36824
ぐぐったらこんな掲示板見つけたけど、回答者の答えがイマイチ判りません。
コードを通して、ベクトルを理解したいのですが、誰か教えてもらえませんか?
0762デフォルトの名無しさん
2007/03/29(木) 17:08:28v1,v2が平面上なのでZ成分のみとなります。 だから省略したのでしょう
0763デフォルトの名無しさん
2007/03/29(木) 17:24:431つは、>>762 の言うように、3次元ベクトルの外積の考え方を使って、
(x1, y1, 0) × (x2, y2, 0) = (0, 0, x1 y2 - x2 y1) の z 成分のみを取ったもの。
もう1つは、n 次元のベクトルは、n - 1 本あれば、それらに垂直なベクトルが決まるので、
n - 1 本のベクトル → 1 本の n 次元ベクトルを求める演算を外積と呼ぶ。
こっちの流儀だち、2次元ベクトルの外積は1本→1本の演算になって、
「積」というとちょっと微妙。
まあ、x1 y2 - x2 y1 は、外積の値というか、
符号付面積、あるいは行列式よね。
3次元ベクトルの外積は、その絶対値が符号付面積になってるから、
その類推で、2次元ベクトル2本の貼る平行四辺形の符号付面積を外積と呼ぶのかも。
0764ラジアンの比較で躓いてます
2007/03/29(木) 17:36:19なるほど・・・時計回りだとZ値が下方向
反時計回りだと上方向になる性質を利用して、
Z値だけで判断すればいいという事ですね!!
0765ラジアンの比較で躓いてます
2007/03/29(木) 17:39:31double norm1 = v1.x * v1.x + v1.y * v1.y; // |v1|^2
double norm2 = v2.x * v2.x + v2.y * v2.y; // |v2|^2
0766デフォルトの名無しさん
2007/03/29(木) 17:47:02え、えっと、変数名もnormだし、コメントもnormだし、normを計算しているんじゃないかなあ。
0767デフォルトの名無しさん
2007/03/29(木) 17:53:54(v1.x * v2.y - v1.y * v2.x)^2 -(v1.x * v1.x + v1.y * v1.y)*( v2.x * v2.x + v2.y * v2.y)
を変形してくと・・・・
って内積計算した方が計算量少ないかもしれないが
まあ、折角 外積計算したからって所じゃないのかな
0768ラジアンの比較で躓いてます
2007/03/29(木) 18:03:57一瞬正規化?とか思っちゃいましたが、「ノルム」でしたか・・・orz
0769デフォルトの名無しさん
2007/03/29(木) 18:19:33って日本語の数学では何だっけ?
0770デフォルトの名無しさん
2007/03/29(木) 18:27:370771デフォルトの名無しさん
2007/03/29(木) 18:37:01参考までに、中国語では「范数」と書くそうな。
0772デフォルトの名無しさん
2007/03/29(木) 18:41:31ノルムはノルムじゃない?
数学用語としてじゃなくて、一般には基準とか模範って訳すけど。
ノルムに似たので(というか、絶対値の一般化)付値ってのがあるけど、
それは英語でも valuation。
0773デフォルトの名無しさん
2007/03/30(金) 08:56:16片方を90度回転したベクトルで内積をとっても、時計回り判定はできる。
90度回転操作を (x, y) → (-y, x) とすると、外積とコメントされた式と同じになる。
好きな方で解釈するといい。
0774デフォルトの名無しさん
2007/03/30(金) 09:20:27片方のベクトルが水平(y成分が0)になるように回転変換し、
もう一方のベクトルのx成分が0なら垂直で y成分の符号を見ればいい
でも、それが内積と外積になっちゃうんだけどね
0775デフォルトの名無しさん
2007/03/30(金) 11:56:04その都度、数学の教養を身に着ける順序でも遅くなくねえ?
問題集をひたすら解くだけの抽象的な数学の本ばかり読んで
いると、生きることの意味がわからなくなってくるよ。
0776デフォルトの名無しさん
2007/03/30(金) 11:57:48半径10センチの球表面の座標(XYZ)をファイルに出力したいと考えております
点の間隔は0.1センチぐらいでいいかな、と
ファイルに落とす部分は、わかっているんですが
座標を算出するアルゴリズムが、さっぱりわからなくて
お分かりになる方、御教授いただけると助かります
0777デフォルトの名無しさん
2007/03/30(金) 12:20:47それが許されればな。
>>756
3次元空間なら
x^2 + y^2 + z^2 = 半径^2
を満す実数だったと。
ざっぱになら x と y で for ループ回しながら z の値を算出すすとか。
もしくは 三次元空間の極座標
x = 半径 * sin(th1) * sin(th2)
y = 半径 * sin(th1) * cos(th2)
z = 半径 * cos(th1)
解説: http://hp.vector.co.jp/authors/VA030421/fdd06.htm
で角度(th1, th2)でループまわすことも考えられる。
角度で回すのなら、球面三角法
http://ja.wikipedia.org/wiki/%E7%90%83%E9%9D%A2%E4%B8%89%E8%A7%92%E6%B3%95
も見おくべし。
0779デフォルトの名無しさん
2007/03/30(金) 20:41:06できてもさしつかえないならいいけど、もしさしつかえあるなら
ユニバーサルメルカトル図法みたいな雰囲気で局所座標系を
とったりするとよさそうな気が
0780デフォルトの名無しさん
2007/03/31(土) 01:53:290781デフォルトの名無しさん
2007/03/31(土) 02:39:25http://www.cubido.at/Blog/tabid/176/EntryID/86/Default.aspx
ジオデシックドームの頂点求めるんだたら↓これ?
http://www2.tokai.or.jp/tomo-kun/readmeJ.html
0782デフォルトの名無しさん
2007/03/31(土) 04:54:500783デフォルトの名無しさん
2007/04/11(水) 11:07:50ヒントはないでしょうか?
0784デフォルトの名無しさん
2007/04/11(水) 11:16:08単純に円弧で近似したいのがどういう状況か判らないのだけど
曲線の場合は、微分が一致するように接続してゆけばいいのだけど
円弧の場合は2点と半径で求まってしまうので、
どうやっても接続点が尖がってしまう
0785デフォルトの名無しさん
2007/04/12(木) 00:12:150786デフォルトの名無しさん
2007/04/12(木) 08:40:070787デフォルトの名無しさん
2007/04/13(金) 04:39:530788784
2007/04/13(金) 06:06:45接続点で中心の方向が一致すればいいと解けば
接続点が尖らないように出来るか
0789デフォルトの名無しさん
2007/04/13(金) 06:16:25)
(
)
(
こういうこと?
0790デフォルトの名無しさん
2007/04/13(金) 13:54:27直線も半径を限りなく大きな値にすれば可能っぽいね。
適当に曲線から3点抽出して、3点を通る円を求めればいいんじゃね?
必要精度に達していなければ間隔を短くし、足りてれば長くして情報量を落とせばいけそう。
0791デフォルトの名無しさん
2007/04/13(金) 20:32:080792デフォルトの名無しさん
2007/04/14(土) 00:14:380|
―+―――→x
|
|
↓
y
を、
y
↑
|
|
―+―――→x
0 |
に変換する行列教えてください。
0793デフォルトの名無しさん
2007/04/14(土) 00:26:240794デフォルトの名無しさん
2007/04/14(土) 15:36:47>about:configで「network.standard-url.encode-utf8」を「true」にします。
上記の設定で、無事、日本語になりました。
気になるのは、IE7では、『"』⇒『"』でしたが、
http://forum.mozilla.gr.jp/?mode=new&no=0&X='国際化'
http://forum.mozilla.gr.jp/?mode=new&no=0&X="国際化"
FireFox2では、『"』⇒『%22』になっていました、少々オシイです。
http://forum.mozilla.gr.jp/?mode=new&no=0&X='国際化'
http://forum.mozilla.gr.jp/?mode=new&no=0&X=%22国際化%22
『%22』を『"』に戻す作業が残ってしまいます。
共通化としてOpera9の国際化URL設定も分かると良いと思います。
0795デフォルトの名無しさん
2007/04/18(水) 10:03:30ゲームプログラムは数学的要素満載だと思うのですが。
■ このスレッドは過去ログ倉庫に格納されています