bakutan.common.math
クラス BMath

java.lang.Object
  上位を拡張 bakutan.common.math.BMath

public class BMath
extends java.lang.Object

作成者:
cattaka ベクトルの各種演算を行うためのクラス。

コンストラクタの概要
BMath()
           
 
メソッドの概要
static boolean calcNormal(BVector2f dest1, BVector2f dest2, BVector2f p1, BShape shape1, BVector2f p2, BShape shape2)
          2つの物体が接触しているときの法線を得る。
static boolean calcNormalCirclexCircle(BVector2f dest1, BVector2f dest2, BVector2f p1, BVector2f p2)
           
static boolean calcNormalCirclexLine(BVector2f dest1, BVector2f dest2, BVector2f p1, float radius1, BVector2f p2, BVector2f p21, BVector2f p22)
           
static boolean calcNormalCirclexRectangle(BVector2f dest1, BVector2f dest2, BVector2f p1, float radius1, BVector2f p2, BVector4f sq2)
           
static float getClosestIntersection(BVector2f start, BVector2f end, BVector2f pos, BShape circle)
          線分start-end(両端含む)と位置posの半径円の最近の交点を得る。
static float getClosestIntersection(BVector2f start, BVector2f end, BVector2f pos, float radius)
          線分start-end(両端含む)と位置posの半径円の最近の交点を得る。
static void getClosestPoint(BVector2f dest, BVector2f p1, BVector2f v, BVector2f p2)
          点p1から方向vに伸びる線上の点p2にもっとも近い点を得る。
static boolean getIntersection(BVector2f dest, BVector2f p11, BVector2f p12, BVector2f p21, BVector2f p22)
          線分p11-p12と線分p21-p22(両端を含む)の共有点を求める。
static void getLineFunction(BVector3f dest, BVector2f pos1, BVector2f pos2)
          pos1とpos2を通る一次関数を得る。
static boolean isIntersect(BVector2f p1, BShape shape1, BVector2f p2, BShape shape2)
          2つの物体が交差しているか判定する。
static boolean isIntersect(BVector2f dest, BVector2f p11, BVector2f p12, BVector2f p21, BVector2f p22)
          線分p11-p12と線分p21-p22(両端を含む)の共有点を求める。
static boolean isIntersectCirclexCirle(BVector2f p1, float radius1, BVector2f p2, float radius2)
          位置p1、半径radius1の円と位置p2、半径radius2の円が共有部分を持つか調べる。
static boolean isIntersectCirclexLine(BVector2f p1, float radius1, BVector2f p2, BVector2f p21, BVector2f p22)
          位置p1、半径radius1の円1と位置pos、線p21-p22の線が交差するか調べる。
static boolean isIntersectCirclexRectangle(BVector2f p1, float radius1, BVector2f p2, BVector4f sq2)
           
static boolean isIntersectInner(BVector2f dest, BVector2f p11, BVector2f p12, BVector2f p21, BVector2f p22)
          線分p11-p12の内部と線分p21-p22の内部(両端を含まない)の共有点を求める。
static boolean isIntersectPointxCirle(BVector2f p1, BVector2f p2, float radius2)
          位置p1の円と位置p2、半径radius2の円が共有部分を持つか調べる。
static boolean isIntersectPointxRectangle(BVector2f p1, BVector2f p2, BVector4f sq2)
           
static boolean isIntersectRectanglexRectangle(BVector2f p1, BVector4f sq1, BVector2f p2, BVector4f sq2)
           
static boolean isOff(BVector2f p1, BVector2f v1, BVector2f p2, BVector2f v2)
          点p1から速度v1で動く点と点p2から速度v2で動く点が遠ざかっているか調べる。
static boolean isOnLine(BVector2f a1, BVector2f a2, BVector2f b)
          a1とa2の線分上にbが存在するか調べる。
static boolean isOnLine(BVector3f a1, BVector3f a2, BVector3f b)
          a1とa2の線分上にbが存在するか調べる。
static boolean isOnLineInner(BVector2f a1, BVector2f a2, BVector2f b)
          a1とa2の線分の内部にbが存在するか調べる。
static boolean isOnLineInner(BVector3f a1, BVector3f a2, BVector3f b)
          a1とa2の線分の内部にbが存在するか調べる。
static void main(java.lang.String[] args)
           
static float nextCollid(BVector2f p1, BShape shape1, BVector2f v1, BVector2f p2, BShape shape2, BVector2f v2)
          物体1と物体2の衝突するまでの時間を得る。
static float nextCollidCirclexCircle(BVector2f p1, float radius1, BVector2f v1, BVector2f p2, float radius2, BVector2f v2)
          円1と円2の衝突するまでの時間を得る。
static float nextCollidCirclexLine(BVector2f p1, float radius1, BVector2f v1, BVector2f p2, BVector2f p21, BVector2f p22, BVector2f v2)
          円と位置pos、線の衝突するまでの時間とその法線を得る。
static float nextCollidCirclexRectangle(BVector2f p1, float radius1, BVector2f v1, BVector2f p2, BVector4f sq2, BVector2f v2)
          円と長方形の衝突するまでの時間を得る。
static float nextCollidPointxCircle(BVector2f p1, BVector2f v1, BVector2f p2, float radius2, BVector2f v2)
          円1と円2の衝突するまでの時間とその法線を得る。
static float nextCollidPointxLine(BVector2f p1, BVector2f v1, BVector2f p2, BVector2f p21, BVector2f p22, BVector2f v2)
          点と線の衝突するまでの時間とその法線を得る。
static float nextCollidPointxRectangle(BVector2f p1, BVector2f v1, BVector2f p2, BVector4f sq2, BVector2f v2)
          点と長方形の衝突するまでの時間を得る。
static float nextCollidRectanglexRectangle(BVector2f p1, BVector2f v1, BVector2f p2, BVector4f sq1, BVector2f v2)
          未実装。
static boolean solveQuadEquation(float[] ans, BVector3f args)
          0 = args.x * x^2 + args.y * y + args.zの二次関数の解2つを引数ansに出力する。
 
クラス java.lang.Object から継承されたメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

BMath

public BMath()
メソッドの詳細

isOnLineInner

public static boolean isOnLineInner(BVector2f a1,
                                    BVector2f a2,
                                    BVector2f b)
a1とa2の線分の内部にbが存在するか調べる。 a1==bまたはa2==bならばfalseを返す。

戻り値:
a1とa2の線分の内部にbが存在するならばtrue、そうでなければfalse。

isOnLine

public static boolean isOnLine(BVector2f a1,
                               BVector2f a2,
                               BVector2f b)
a1とa2の線分上にbが存在するか調べる。 a1==bまたはa2==bならばtrueを返す。

戻り値:
a1とa2の線分上にbが存在するならばtrue、そうでなければfalse。

isOnLineInner

public static boolean isOnLineInner(BVector3f a1,
                                    BVector3f a2,
                                    BVector3f b)
a1とa2の線分の内部にbが存在するか調べる。 a1==bまたはa2==bならばfalseを返す。

戻り値:
a1とa2の線分の内部にbが存在するならばtrue、そうでなければfalse。

isOnLine

public static boolean isOnLine(BVector3f a1,
                               BVector3f a2,
                               BVector3f b)
a1とa2の線分上にbが存在するか調べる。 a1==bまたはa2==bならばtrueを返す。

戻り値:
a1とa2の線分上にbが存在するならばtrue、そうでなければfalse。

isIntersectInner

public static boolean isIntersectInner(BVector2f dest,
                                       BVector2f p11,
                                       BVector2f p12,
                                       BVector2f p21,
                                       BVector2f p22)
線分p11-p12の内部と線分p21-p22の内部(両端を含まない)の共有点を求める。

パラメータ:
dest - 交点の出力先
p11 -
p12 -
p21 -
p22 -
戻り値:
共有点が存在するならばtrue。そうでなければfalse。

isIntersect

public static boolean isIntersect(BVector2f dest,
                                  BVector2f p11,
                                  BVector2f p12,
                                  BVector2f p21,
                                  BVector2f p22)
線分p11-p12と線分p21-p22(両端を含む)の共有点を求める。

パラメータ:
dest - 交点の出力先
p11 -
p12 -
p21 -
p22 -
戻り値:
共有点が存在するならばtrue。そうでなければfalse。

solveQuadEquation

public static boolean solveQuadEquation(float[] ans,
                                        BVector3f args)
0 = args.x * x^2 + args.y * y + args.zの二次関数の解2つを引数ansに出力する。

パラメータ:
ans - 長さ2の配列で解の出力先
args - 二次関数を表すベクトル
戻り値:
実数解を持つならばtrue、そうでないならfalse。

getIntersection

public static boolean getIntersection(BVector2f dest,
                                      BVector2f p11,
                                      BVector2f p12,
                                      BVector2f p21,
                                      BVector2f p22)
線分p11-p12と線分p21-p22(両端を含む)の共有点を求める。

パラメータ:
dest - 交点の出力先
p11 -
p12 -
p21 -
p22 -
戻り値:
共有点が存在するならばtrue。そうでなければfalse。

getLineFunction

public static void getLineFunction(BVector3f dest,
                                   BVector2f pos1,
                                   BVector2f pos2)
pos1とpos2を通る一次関数を得る。 dest.x * x + dest.y * y + dest.z = 0

パラメータ:
dest - 一次関数の出力先
pos1 -
pos2 -

nextCollid

public static float nextCollid(BVector2f p1,
                               BShape shape1,
                               BVector2f v1,
                               BVector2f p2,
                               BShape shape2,
                               BVector2f v2)
物体1と物体2の衝突するまでの時間を得る。現在はCIRCLEとRECTANGLEのみ正常に作動する。

パラメータ:
p1 - 物体1の位置
shape1 - 物体1の形状
v1 - 物体1の速度
p2 - 物体2の位置
shape2 - 物体2の形状
v2 - 物体2の速度
戻り値:
衝突するまでの時間。衝突しない場合はFloat.NaN。

nextCollidPointxCircle

public static float nextCollidPointxCircle(BVector2f p1,
                                           BVector2f v1,
                                           BVector2f p2,
                                           float radius2,
                                           BVector2f v2)
円1と円2の衝突するまでの時間とその法線を得る。

パラメータ:
p1 - 点1の位置
v1 - 点1の速度
p2 - 円2の位置
radius2 - 円2の半径
v2 - 円2の速度
戻り値:
衝突するまでの時間。衝突しない場合はFloat.NaN。

nextCollidCirclexCircle

public static float nextCollidCirclexCircle(BVector2f p1,
                                            float radius1,
                                            BVector2f v1,
                                            BVector2f p2,
                                            float radius2,
                                            BVector2f v2)
円1と円2の衝突するまでの時間を得る。

パラメータ:
p1 - 円1の位置
radius1 - 円1の半径
v1 - 円1の速度
p2 - 円2の位置
radius2 - 円2の半径
v2 - 円2の速度
戻り値:
衝突するまでの時間。衝突しない場合はFloat.NaN。

nextCollidPointxLine

public static float nextCollidPointxLine(BVector2f p1,
                                         BVector2f v1,
                                         BVector2f p2,
                                         BVector2f p21,
                                         BVector2f p22,
                                         BVector2f v2)
点と線の衝突するまでの時間とその法線を得る。

パラメータ:
p1 - 点の位置
v1 - 点の速度
p2 - 線のオフセット
p21 - 線の視点
p22 - 線の位置
v2 - 線の速度
戻り値:
衝突するまでの時間。衝突しない場合はFloat.NaN。

nextCollidCirclexLine

public static float nextCollidCirclexLine(BVector2f p1,
                                          float radius1,
                                          BVector2f v1,
                                          BVector2f p2,
                                          BVector2f p21,
                                          BVector2f p22,
                                          BVector2f v2)
円と位置pos、線の衝突するまでの時間とその法線を得る。

パラメータ:
p1 - 円の位置
radius1 - 円の半径
v1 - 円の速度
p2 - 線のオフセット
p21 - 線の視点
p22 - 線の位置
v2 - 線の速度
戻り値:
衝突するまでの時間。衝突しない場合はFloat.NaN。

nextCollidPointxRectangle

public static float nextCollidPointxRectangle(BVector2f p1,
                                              BVector2f v1,
                                              BVector2f p2,
                                              BVector4f sq2,
                                              BVector2f v2)
点と長方形の衝突するまでの時間を得る。

パラメータ:
p1 - 点の位置
v1 - 点の速度
p2 - 長方形の位置
sq2 - 長方形の形状
v2 - 長方形の速度
戻り値:
衝突するまでの時間

nextCollidCirclexRectangle

public static float nextCollidCirclexRectangle(BVector2f p1,
                                               float radius1,
                                               BVector2f v1,
                                               BVector2f p2,
                                               BVector4f sq2,
                                               BVector2f v2)
円と長方形の衝突するまでの時間を得る。

パラメータ:
p1 - 円の位置
radius1 - 円の半径
v1 - 円の速度
p2 - 長方形の位置
sq2 - 長方形の大きさ
v2 - 長方形の速度
戻り値:
衝突するまでの時間。衝突しない場合はFloat.NaN。

nextCollidRectanglexRectangle

public static float nextCollidRectanglexRectangle(BVector2f p1,
                                                  BVector2f v1,
                                                  BVector2f p2,
                                                  BVector4f sq1,
                                                  BVector2f v2)
未実装。必ずRuntimeExceptionをスローする。

パラメータ:
p1 -
v1 -
p2 -
sq1 -
v2 -
戻り値:
衝突するまでの時間

isOff

public static boolean isOff(BVector2f p1,
                            BVector2f v1,
                            BVector2f p2,
                            BVector2f v2)
点p1から速度v1で動く点と点p2から速度v2で動く点が遠ざかっているか調べる。

パラメータ:
p1 -
v1 -
p2 -
v2 -
戻り値:
二点が離れる一方ならばtrue、そうでなければfalse。

isIntersect

public static boolean isIntersect(BVector2f p1,
                                  BShape shape1,
                                  BVector2f p2,
                                  BShape shape2)
2つの物体が交差しているか判定する。

パラメータ:
p1 - 物体1の位置
shape1 - 物体1の形状
p2 - 物体2の位置
shape2 - 物体2の形状
戻り値:
2つの物体が交差するならtrue、そうでなければfalse。

isIntersectCirclexLine

public static boolean isIntersectCirclexLine(BVector2f p1,
                                             float radius1,
                                             BVector2f p2,
                                             BVector2f p21,
                                             BVector2f p22)
位置p1、半径radius1の円1と位置pos、線p21-p22の線が交差するか調べる。

パラメータ:
p1 - 円の位置
radius1 - 円の半径
p2 - 線のオフセット
p21 - 線の視点
p22 - 線の位置
戻り値:
2つが交差するならtrue、そうでなければfalse。

isIntersectPointxCirle

public static boolean isIntersectPointxCirle(BVector2f p1,
                                             BVector2f p2,
                                             float radius2)
位置p1の円と位置p2、半径radius2の円が共有部分を持つか調べる。

パラメータ:
p1 -
p2 -
radius2 -
戻り値:
2つが交差するならtrue、そうでなければfalse。

isIntersectCirclexCirle

public static boolean isIntersectCirclexCirle(BVector2f p1,
                                              float radius1,
                                              BVector2f p2,
                                              float radius2)
位置p1、半径radius1の円と位置p2、半径radius2の円が共有部分を持つか調べる。

パラメータ:
p1 -
radius1 -
p2 -
radius2 -
戻り値:
2つの円が交差するならtrue、そうでなければfalse。

isIntersectPointxRectangle

public static boolean isIntersectPointxRectangle(BVector2f p1,
                                                 BVector2f p2,
                                                 BVector4f sq2)

isIntersectCirclexRectangle

public static boolean isIntersectCirclexRectangle(BVector2f p1,
                                                  float radius1,
                                                  BVector2f p2,
                                                  BVector4f sq2)

isIntersectRectanglexRectangle

public static boolean isIntersectRectanglexRectangle(BVector2f p1,
                                                     BVector4f sq1,
                                                     BVector2f p2,
                                                     BVector4f sq2)

getClosestIntersection

public static float getClosestIntersection(BVector2f start,
                                           BVector2f end,
                                           BVector2f pos,
                                           float radius)
線分start-end(両端含む)と位置posの半径円の最近の交点を得る。

パラメータ:
start - 線分の始点
end - 線分の終点
pos - 円の位置
radius - 円の半径
戻り値:
始点から交点までの最近距離、交差しない場合はFloat.NaNを返す。

getClosestIntersection

public static float getClosestIntersection(BVector2f start,
                                           BVector2f end,
                                           BVector2f pos,
                                           BShape circle)
線分start-end(両端含む)と位置posの半径円の最近の交点を得る。

パラメータ:
start - 線分の始点
end - 線分の終点
pos - 円の位置
circle - 円の半径
戻り値:
始点から交点までの最近距離、交差しない場合はFloat.NaNを返す。

getClosestPoint

public static void getClosestPoint(BVector2f dest,
                                   BVector2f p1,
                                   BVector2f v,
                                   BVector2f p2)
点p1から方向vに伸びる線上の点p2にもっとも近い点を得る。

パラメータ:
dest - 出力先
p1 -
v -
p2 -

calcNormal

public static boolean calcNormal(BVector2f dest1,
                                 BVector2f dest2,
                                 BVector2f p1,
                                 BShape shape1,
                                 BVector2f p2,
                                 BShape shape2)
2つの物体が接触しているときの法線を得る。現在はCIRCLEとRECTANGLEのみ正常に作動する。

パラメータ:
dest1 - 物体1の法線
dest2 - 物体2の法線
p1 - 物体1の位置
shape1 - 物体1の形状
p2 - 物体2の位置
shape2 - 物体2の形状
戻り値:
正常に法線が得られたときにtrue、そうでないときはfalse。

calcNormalCirclexCircle

public static boolean calcNormalCirclexCircle(BVector2f dest1,
                                              BVector2f dest2,
                                              BVector2f p1,
                                              BVector2f p2)

calcNormalCirclexLine

public static boolean calcNormalCirclexLine(BVector2f dest1,
                                            BVector2f dest2,
                                            BVector2f p1,
                                            float radius1,
                                            BVector2f p2,
                                            BVector2f p21,
                                            BVector2f p22)

calcNormalCirclexRectangle

public static boolean calcNormalCirclexRectangle(BVector2f dest1,
                                                 BVector2f dest2,
                                                 BVector2f p1,
                                                 float radius1,
                                                 BVector2f p2,
                                                 BVector4f sq2)

main

public static void main(java.lang.String[] args)