HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0428
ベクトルと左右判定3未解決


リンク

2019/4/28(Sun) 22:02:44|NO.87229

内積外積がいまだ理解できなくて苦労しています。
特定座標から移動する物体から見て対象座標が右にあれば1左なら-1を返す
プログラムを過去ログなど参考に動きました。
無駄が多い気がしますがこれで良いのでしょうか?

teki=500 //対象物座標 yteki=180 myx=150 //自分座標 myy=300 repeat redraw 0 mox=mousex moy=mousey xp=mox-myx //移動量 yp=moy-myy ans=sin(atan(yp,xp)-atan(yteki-myy,xteki-myx)) color:boxf if ans>0:ans2=-1:else:ans2=1 color 255,255,255 pset xteki,yteki line mox,moy,myx,myy pos 0,0 mes " 右かな?"+ans2 redraw 1 await 16 loop



この記事に返信する


リンク

2019/4/28(Sun) 22:05:16|NO.87230

コメント訂正
動きました→作りました
ソース訂正

xteki=500 //対象物座標 yteki=180 myx=150 //自分座標 myy=300 repeat redraw 0 mox=mousex moy=mousey xp=mox-myx //移動量 yp=moy-myy ans=sin(atan(yp,xp)-atan(yteki-myy,xteki-myx)) color:boxf if ans>0:ans2=-1:else:ans2=1 color 255,255,255 pset xteki,yteki line mox,moy,myx,myy pos 0,0 mes " 右かな?"+ans2 redraw 1 await 16 loop



み☆けー

リンク

2019/4/28(Sun) 23:41:02|NO.87231

2Dではベクトルの外積量がそのままsinに関するスカラになるので、別にatan(角度空間)を介する必要性はありません。
よって、下記の演算のみで答えが同じになります。


xteki=500 //対象物座標 yteki=180 myx=150 //自分座標 myy=300 repeat redraw 0 mox=mousex moy=mousey xp=mox-myx : yp=moy-myy//myからmoへ向かうベクトル xq=xteki-myx : yq=yteki-myy//myからtekiへ向かうベクトル //ans=sin(atan(yp,xp)-atan(yteki-myy,xteki-myx)) ans = xq*yp - yq*xp//ベクトルが張る平行四辺形の符号付き面積、符号しか使わないならベクトルを正規化せずこれでOK if ans>0:ans2=-1:else:ans2=1 color:boxf color 255,0,0 : line myx,myy,xteki,yteki//基準線を赤線で color 255,255,255 : line mox,moy,myx,myy//今の角度を白線で pos 0,0 mes " 右かな?"+ans2 redraw 1 await 16 loop

2Dにおいては基準ベクトル×対象ベクトル(×は外積記号で、クロス:crossと読みます)で基準ベクトルと対象ベクトルが張る平行四辺形の面積がスカラとして求まります。
ただし、求まるスカラは符号付きになっており、基準ベクトルに対して対象ベクトルが右回りか左回りかで符号が決まります。
どちらが正でどちらが負になるかは使う座標系による異なりますが、使う座標系を固定すれば結果は同じです。
基準ベクトルと対象ベクトルを予め正規化(長さ1のベクトルにすること)しておくことで、平行四辺形の面積=2つのベクトルの為す角のsin量と一致する性質を持つので、そういう用途でsinを求める時に使われたりします。
2Dに関しては図形的な解釈が可能でかなり直観的に理解しやすいですので、”2Dの外積”に絞って色々検索してみてください。



リンク

2019/4/29(Mon) 14:06:18|NO.87232

ご教示ありがとうございました、完璧です
計算によって何を求めているのか、求めたものはどういう意味を持つのか
がやっぱりイメージしづらいですが
「理解してない、でも使える」状態から抜け出したくは思っています



ONION software Copyright 1997-2021(c) All rights reserved.