トップページ > 空即是色 > 2006年の記事 > 線分交差判定その2

空即是色 線分交差判定その2

2006年 02月24日

前回に引き続き、実装。
曲線を適当に線分で分割/近似して交差判定→交点算出している。

線分の交差判定。
(x1,y1)(x2,y2)を結ぶ線分と(x3,y3)(x4,y4)を結ぶ線分の交差を判定する。

inline bool isHitSegments(
  float x1, float y1,
  float x2, float y2,
  float x3, float y3,
  float x4, float y4
){
  if( ( (x1-x2)*(y3-y1)+(y1-y2)*(x1-x3) ) *
    ( (x1-x2)*(y4-y1)+(y1-y2)*(x1-x4) ) < 0 ){
    if( ( (x3-x4)*(y1-y3)+(y3-y4)*(x3-x1) ) *
      ( (x3-x4)*(y2-y3)+(y3-y4)*(x3-x2) ) < 0 ){
      return true;
    }
  }
  return false;
}

交点の算出。
(x1,y1)(x2,y2)を結ぶ線分と(x3,y3)(x4,y4)を結ぶ線分の交点を算出する。

inline void calcIntersection(
  float x1, float y1,
  float x2, float y2,
  float x3, float y3,
  float x4, float y4,
  float* v
){
  float x, y;
  float a1, b1, c1, a2, b2, c2;
  
  a1 = y1-y2;
  b1 = x2-x1;
  c1 = x1*y2 - x2*y1;
  a2 = y3-y4;
  b2 = x4-x3;
  c2 = x3*y4 - x4*y3;
  
  x = (b1*c2 - b2*c1) / (a1*b2 - a2*b1);
  y = (a1*c2 - a2*c1) / (a2*b1 - a1*b2);
  v[0] = x;
  v[1] = y;
}

参考:
F_Heavenly_Jewels22.html

ページの先頭へ戻る

トラックバック

この記事のトラックバックURL:http://null-null.net/mt/mt-tb.cgi/419

ページの先頭へ戻る

コメント

ページの先頭へ戻る

iPhoneDev.null-null.net

コメントの一覧

特定のキーワードにマッチした内容の記事をTumblrやMovableTypeに自動的に投稿する
  • nogami
    (2008年03月18日)
  • プールデザイン菅沼
    (2008年03月25日)
  • yuiyui
    (2008年04月12日)
MacOSX環境のOpenGLで日本語文字列の描画
  • nogami
    (2007年10月08日)

  • (2007年10月08日)
  • nogami
    (2007年10月09日)
ウップス!
  • あるぱっか
    (2007年05月24日)
  • nogami
    (2007年05月28日)
  • あるぱっか
    (2007年05月30日)

RSSフィード

このブログの更新情報を、XML(ATOM)フォーマットで提供しています。
ご利用のRSSリーダーやアプリケーションにRSSフィードを登録してください。

ページの先頭へ戻る


Copyright(c) Daisuke Nogami. All Right Reserved.