タグ

2016年6月8日のブックマーク (4件)

  • はがき職人

    なってみたい。 いくら出しても読まれない。 どうしたら読まれますか?

    はがき職人
  • 点の多角形に対する内外判定

    点が多角形ループの内側にあるか外側にあるかを判定するには? 要素は2次元空間内に存在するものとします。 解説 内外判定の基的な考え方として、「内外を判定したい点から発するレイ(ray:一条の光)を仮定し、レイが多角形の辺を何回横切るかを数え、偶数回横切るとき、点は多角形の外側、奇数回横切るとき、点は多角形の内側と判定することができる」という考え方があります。 ただ、この考え方に従って実装を行うと、レイに対して点接触になる点のある多角形や、レイに対して線接触になる辺のある多角形の場合に判定を誤ってしまう実装になることがあります。 下に示す実装では、レイをXプラス方向に発して、多角形の辺がレイを、「上から下に横切るときには横切り回数を1引き、下から上に横切るときには横切り回数を1足すこととする」ことや、「レイの線上にある点はレイより上にあることとする」ことにより、レイに対して点接触になる点の

    kjktk
    kjktk 2016/06/08
  • [Unity] バウンディングボックス(AABB)について調べてみた

    ゲームにおいて衝突判定を行う際、AABB(軸平行境界ボックス)を定義して無駄な計算を削減するアルゴリズムがよく用いられます。 AABBはxyzの各軸に平行な直方体です。 軸に平行であるため、当たり判定の計算が非常に軽くなります。 複雑なメッシュ形状に対する衝突判定を行う際、メッシュ形状を包含するAABBを事前に定義し、まずAABBとの衝突判定(軽い計算)を行います。 AABBと衝突している場合のみ、メッシュ形状に対する衝突判定(重たい計算)を行います。 こうすることで、AABBに衝突しなかった場合は重たい計算は行わずに済みます。 このアルゴリズムはUnityのColliderでも使用されています。 Collider.boundsがワールド座標のAABBを表しています。 このAABBを次のスクリプトを用いて表示してみました。 using UnityEngine; /// <summary>

    [Unity] バウンディングボックス(AABB)について調べてみた
    kjktk
    kjktk 2016/06/08
  • Spaghetti Source - 点-多角形包含判定

    説明 点が多角形の内部/境界/外部のどこにあるかを判定する. その点を通る半直線を引き,それが多角形の辺と何回交差するかを数える.一回交差するたびに内外が切り替わる.半直線として x 軸に平行で正の無限大方向に伸びるものを取れば,交差判定は y 座標の比較と外積の符号判定で行える. 上の判定と同時に線上判定を行うことで境界判定も行う. 計算量 O(n). ソースコード #define curr(P, i) P[i] #define next(P, i) P[(i+1)%P.size()] enum { OUT, ON, IN }; int contains(const polygon& P, const point& p) { bool in = false; for (int i = 0; i < P.size(); ++i) { point a = curr(P,i) - p, b =

    kjktk
    kjktk 2016/06/08