since 2003
イレコナビ サイトマップ
< 武道 >
< 理論 >
< デザイン例 >
< 四つ足の構え >
< ポジショニング・アナライザー >

構え
気態用 液態用 固態用

四つ足の構え
基本動作 装飾動作 少年部
モード 遷移 出方 入り方 手・腕 頭・首 胴体 足・脚 緩急

名称=ポジショニング・アナライザー。(フラックス・キャパシターちゃいますよ)
宇田作品番号=UWV20260331。
種類=BASIC上で走るプログラム。
製作年月日=2026年03月31日。
製作者=宇田雄一。

使い方は以下です。

direction of x1 and x2 same(1) or opposite(-1)? x1軸とx2軸の向きが同じ側なら1を、反対側なら-1を入力する
x1 of my part x1a=? 敵が狙っている私の身体部位のx1座標を入力する(単位はスネ)
y1 of my part y1a=? 敵が狙っている私の身体部位のy1座標を入力する(単位はスネ)
x2 of my part x2b=? 敵が狙っている私の身体部位のx2座標を入力する(単位はスネ)
(敵の特定の攻撃技の標的の最適位置を入力する)
y2 of my part y2b=? 敵が狙っている私の身体部位のy2座標を入力する(単位はスネ)
(敵の特定の攻撃技の標的の最適位置を入力する)
x2 of his part x2a=? 私が狙っている敵の身体部位のx2座標を入力する(単位はスネ)
(敵の特定の姿勢のデータを入力する)
y2 of his part y2a=? 私が狙っている敵の身体部位のy2座標を入力する(単位はスネ)
(敵の特定の姿勢のデータを入力する)
x1 of his home x1c= ? 敵の元の位置のx1座標を入力する(単位はスネ)
y1 of his home y1c/SQR(3)=? 敵の元の位置のy1座標÷(√3スネ)を入力する。
x2 of his home x2c=? 敵の元の位置のx2座標を入力する(単位はスネ)。
敵の姿勢がAFS基本姿勢かAFS上起姿勢なら0を入力する。
敵の姿勢がレの字立ちなら-0.25を入力する。
angle of y1 tht1=? 度を単位としてθ1の値を入力する。
(座標系x1-y1-O1の傾きを入力する)
direction of x1 and x3 same(1) or opposite(-1)? x1軸とx3軸の向きが同じ側なら1を、反対側なら-1を入力する
x3 of my pole x3a=? 座標系x3-y3-O3に至る回転の中心のx3座標を入力する(単位はスネ)。
(ピヴォットの軸足の位置を入力する)
y3 of my pole y3a=? 座標系x3-y3-O3に至る回転の中心のy3座標を入力する(単位はスネ)。
(ピヴォットの軸足の位置を入力する)
x1 of my pole x1d=? 座標系x3-y3-O3に至る回転の中心のx1座標を入力する(単位はスネ)。
(ピヴォットの軸足の位置を入力する)
y1 of my pole y1d/SQR(3)=? 座標系x3-y3-O3に至る回転の中心のy1座標÷(√3スネ)を入力する。
(ピヴォットの軸足の位置を入力する)
x3 of his part x3b=? 私が狙っている敵の身体部位のx3座標を入力する(単位はスネ)
(私の攻撃技の標的の最適位置のx3座標を入力する)
angle of y3 tht3=? 度を単位としてθ3の値を入力する。
(座標系x3-y3-O3の傾きを入力する)

angle of -y2 tht2= 度を単位としてθ2の値が出力される。
(座標系x2-y2-O2の傾きが出力される)
x1 of his part x1b= 私が狙っている敵の身体部位のx1座標が出力される(単位はスネ)
y1 of his part y1b= 私が狙っている敵の身体部位のy1座標が出力される(単位はスネ)
angle of y3 tht3= 度を単位としてθ3の値が出力される。
(座標系x3-y3-O3の傾きが出力される)
x3 of his part x3b= 私が狙っている敵の身体部位のx3座標が出力される(単位はスネ)
y3 of his part y3b= 私が狙っている敵の身体部位のy3座標が出力される(単位はスネ)
my pole his part distance= 私が狙っている敵の身体部位のmy pole(蹴る場合の軸足の位置)からの距離が出力される(単位はスネ)
第205行で根号の中が負(マイナス)に成ってエラーが出る場合があります。
(x1b-x1d)2 + (y1b-y1d)2 - x3a2 < 0.
√[ (x1b-x1d)2 + (y1b-y1d)2 - x3a2] = 存在しない。
この場合には、私が狙っている敵の身体部位がmy poleに近過ぎて、y3軸の真上に位置させる事が出来ません。
よって、この場合はθ3=存在しない、という判定に成ります。
この他に、θ3(angle of y3 tht3=)の出力およびそれ以降がとんでもない値に成る場合があります。
これは、tanの逆関数が多価であるために起こる不具合を回避する処理をプログラム中に書き込むのを私がさぼっているせいです。
θ3(angle of y3 tht3=)の出力がとんでもない値に成った場合は、その値に180を足すか引くかして得られる数値をangle of y3 tht3=?で入力して再計算して下さい。
第205行で根号の中が負(マイナス)に成ってエラーが出た場合、θ3を自分で入力したい場合は、
202 GOTO 250
をプログラムに追加して再実行して下さい。
θ3の値を色々変えて調べてみたい場合は、
300 GOTO 250
をプログラムに追加して再実行して下さい。

プログラムのLISTは以下です。
 
 

2026年04月08日にバグを発見し、デバグしました。
230 X3B=X3A+S*(X1B-X1D)*COS(THT3-THT1)+S*(Y1B-Y1D)*SIN(THT3-THT1)
230 X3B=S*X3A+S*(X1B-X1D)*COS(THT3-THT1)+S*(Y1B-Y1D)*SIN(THT3-THT1)
260 X3B=X3A+S*(X1B-X1D)*COS(THT3-THT1)+S*(Y1B-Y1D)*SIN(THT3-THT1)
260 X3B=S*X3A+S*(X1B-X1D)*COS(THT3-THT1)+S*(Y1B-Y1D)*SIN(THT3-THT1)

2026年04月12日にバグを発見し、デバグしました。
246 PRINT"my pole his part distance=";SQR((X3A-X3B)^2+(Y3A-Y3B)^2)
246 PRINT"distance of his part=";SQR(X3B^2+Y3B^2)
295 PRINT"my pole his part distance=";SQR((X3A-X3B)^2+(Y3A-Y3B)^2)
295 PRINT"distance of his part=";SQR(X3B^2+Y3B^2)

2026年04月14日に、X3Bの値を入力して指定できる様にプログラムを改良しました。
追加した 197 INPUT"x3 of his part x3b=";X3B
変更前 205 C=SQR((X1B-X1D)^2+(Y1B-Y1D)^2-X3a^2)
変更後 205 C=SQR((X1B-X1D)^2+(Y1B-Y1D)^2-(X3B-X3a)^2)
変更前 210 THT3=THT1-THT5+ATN(-X3A*S/C)
変更後 210 THT3=THT1-THT5+ATN((X3B-X3A)*S/C)
削除した 230 X3B=X3A+S*(X1B-X1D)*COS(THT3-THT1)+S*(Y1B-Y1D)*SIN(THT3-THT1)
削除した 240 PRINT"x3 of his part x3b=";X3B


私の胴の向き=右 私の胴の向き=左
敵の元の位置は図中の赤色の●印の位置です。
以下で「第4状態のライン」と言う時には、それは、第4状態の両足の中指の中足趾節関節を結ぶ直線、という意味です。
以下で「第6状態のライン」と言う時には、それは、第6状態の両足の中指の中足趾節関節を結ぶ直線、という意味です。

x軸が同じ側を向いている、1を入力する x軸が反対側を向いている、-1を入力する
敵の標的に成っている私の姿勢の座標軸はx1-y1-O1(青色)です。
敵の姿勢の座標軸はx2-y2-O2(赤色)です。
敵が標的にしている私の身体部位は青色の●印、私が狙っている敵の身体部位は赤色の●印です。
青色の●印の座標を(x1, y1) = (x1a, y1a), (x2, y2) = (x2b, y2b)とする。
赤色の●印の座標を(x1, y1) = (x1b, y1b), (x2, y2) = (x2a, y2a)とする。
敵の元の位置の座標は(x1, y1) = (x1c, y1c)とする。
y1軸の正(プラス)の向きは私の第4状態や第6状態のラインに垂直な向きをθ1だけ回転して得られるとする。
y2軸の負(マイナス)の向きは私の第4状態や第6状態のラインに垂直な向きをθ2だけ回転して得られるとする。
やだし、回転角(θ1とθ2)の符号は、x1軸の正の向きを90度回転してy1軸の正の向きに重ねる回転と同じ向きなら正(プラス)とする。
(敵の元の位置のx2) = x2cだとする。
敵の姿勢がAFS基本姿勢かAFS上起姿勢なら、敵の元の位置はy2軸上に有る(x2c = 0)とする。
敵の姿勢がレの字立ちなら、x2c = -0.25スネだとする。
---
敵を攻撃する時の私の姿勢の座標系はx3-y3-O3(青色)です。
y3軸の正(プラス)の向きは私の第4状態や第6状態のラインに垂直な向きをθ3だけ回転して得られるとする。
座標系x3-y3-O3は、(x3, y3) = (x3a, y3a)を中心にθ3だけ回転して得られた、とする。
回転角θ3の符号は、x1軸の正の向きを90度回転してy1軸の正の向きに重ねる回転と同じ向きなら正(プラス)とする。
(x3, y3) = (x3a, y3a) ⇔ (x1, y1) = (x1d, y1d) とする。
(x3, y3) = (x3b, y3b) ⇔ (x1, y1) = (x1b, y1b) とする。

実のところ、(x1d, y1d)と(x3a, y3a)は、ピヴォットの軸足の位置座標である必要はなく、任意の点の座標でも式は成り立つ。
けれど、(x1d, y1d)と(x3a, y3a)が両方とも計算前から分かっている必要が有り、それはピヴォットの軸足の位置座標だけだろう。


以下は準備の計算と下書きです。
---

計算の前半(x軸の向きが逆の場合)
まず座標変換式を求める。
(x1, y1) = (x1a, y1a) + [(x2b - x2, y2b - y2)を(θ2 - θ1)だけ回転して得られるベクトル].
x1 = x1a + (x2b - x2)cos(θ2 - θ1) - (y2b - y2)sin(θ2 - θ1),
y1 = y1a + (x2b - x2)sin(θ2 - θ1) + (y2b - y2)cos(θ2 - θ1).
(敵の元の位置のx2) = x2cである為には、
(x1, y1) = (x1c, y1c)ならばx2 = x2c、が成り立つ事が必要十分。
x1c = x1a + (x2b - x2c)cos(θ2 - θ1) - (y2b - y2)sin(θ2 - θ1),
y1c = y1a + (x2b - x2c)sin(θ2 - θ1) + (y2b - y2)cos(θ2 - θ1).
これら2式からy2を消去すると、
(x1c - x1a)cos(θ2 - θ1) + (y1c - y1a)sin(θ2 - θ1) = x2b - x2c.
ここで、
tanθ4 = (x1c - x1a)/(y1c - y1a)
つまり
θ4 = tan-1[(x1c - x1a)/(y1c - y1a)]
と置くと、
sin(θ4 + θ2 - θ1) = (x2b - x2c)/√[(x1c - x1a)2 + (y1c - y1a)2]
だから、
θ2 = θ1 - θ4 + sin-1{(x2b - x2c)/√[(x1c - x1a)2 + (y1c - y1a)2]}.
これでθ2が求まった事に成る。
座標変換式に
(x1, y1) = (x1b, y1b), (x2, y2) = (x2a, y2a)を代入すると、
x1b = x1a + (x2b - x2a)cos(θ2 - θ1) - (y2b - y2a)sin(θ2 - θ1),
y1b = y1a + (x2b - x2a)sin(θ2 - θ1) + (y2b - y2a)cos(θ2 - θ1)
この式で(x1b, y1b)が求まる。

計算の後半(x軸の向きが同じ場合)
座標変換式を求める。
(x1, y1) = (x1d, y1d) + [(x3 - x3a, y3 - y3a)をθ3 - θ1だけ回転して得られるベクトル].
x1 = x1d + (x3 - x3a)cos(θ3 - θ1) - (y3 - y3a)sin(θ3 - θ1),
y1 = y1d + (x3 - x3a)sin(θ3 - θ1) + (y3 - y3a)cos(θ3 - θ1).
これらの式に、私が標的にする敵の身体部位の座標
(x1, y1) = (x1b, y1b), (x3, y3) = (x3b, y3b)
を代入すると、
x1b = x1d + (x3b - x3a)cos(θ3 - θ1) - (y3b - y3a)sin(θ3 - θ1),
y1b = y1d + (x3b - x3a)sin(θ3 - θ1) + (y3b - y3a)cos(θ3 - θ1)
これをx3b, y3bについて解くと、
x3b = x3a + (x1b - x1d)cos(θ3 - θ1) + (y1b - y1d)sin(θ3 - θ1),
y3b = y3a - (x1b - x1d)sin(θ3 - θ1) + (y1b - y1d)cos(θ3 - θ1).
θ3を指定する(手で入れる)場合には、この式によって(x3b, y3b)が求まる。
x3b = 0という条件でθ3を決める事も出来る。
0 = x3a + (x1b - x1d)cos(θ3 - θ1) + (y1b - y1d)sin(θ3 - θ1).
ここで
tanθ5 = (x1b - x1d)/(y1b - y1d)
つまり、
θ5 = tan-1[(x1b - x1d)/(y1b - y1d)]
と置くと、
sin(θ5 + θ3 - θ1) = -x3a/√[(x1b - x1d)2 + (y1b - y1d)2]
したがって、
θ3 = θ1 - θ5 + sin-1{-x3a/√[(x1b - x1d)2 + (y1b - y1d)2]}.
私の攻撃技が「蹴り」である場合には、座標系x3-y3-O3として、蹴りの軸足の中指の中足趾節関節の位置にO3を置けば、標的までの水平距離は√[(x3b)2 + (y3b)2)]です。



最終更新2026年04月14日