DXライブラリでのVector2の使い方。

アバター
keito94
記事: 264
登録日時: 8年前
連絡を取る:

DXライブラリでのVector2の使い方。

投稿記事 by keito94 » 8年前

DXライブラリの二次元ベクトルは意外と楽に自作できます。(DXライブラリではD3DXVECTORが使えないからどうしようかと思いました。)
なぜなら、

CODE:

typedef struct tagVector2 {
	float x;
	float y;
}Vector2;
と非常にシンプルだからです。

そこで、この構造体を使って、このサイトに書かれてあるサンプルコードを書いてみましょう。コメントや使い方などは、このサンプルコードのもととなったサイトを見てください。(ご自由にお使いくださいということなので…。)

CODE:

//線分の構造体
struct Segment{
	Vector2 s;
	Vector2 v;
};

//2Dベクトルの外積
float Vector2Cross(Vector2* v1,Vector2* v2){
	return v1->x * v2->Y - v1->y * v2->x;
}

bool ColSegments(Segment &seg1,Segment &seg2,float* outT1 = 0,float* outT2 = 0, Vector2* outPos = 0){
	Vector2 v = seg2.s- seg1.s;
	float Crs_v1_v2 = Vector2Cross(&seg1.v,&seg2.v);
	if(Crs_v1_v2 == 0.0F){
		return false;
	}
	
	float Crs_v_v1 = Vector2Cross(&v,&seg1.v);
	float Crs_v_v2 = Vector2Cross(&v,&seg2.v);
	
	float t1 = Crs_v_v2 / Crs_v1_v2;
    float t2 = Crs_v_v1 / Crs_v1_v2;

    if ( outT1 )
       *outT1 = Crs_v_v2 / Crs_v1_v2;
    if ( outT2 )
       *outT2 = Crs_v_v1 / Crs_v1_v2;
    
	const float eps = 0.00001f;
    if ( t1 + eps  1 || t2 + eps  1 ) {
       // 交差していない
      return false;
    }

    if( outPos )
       *outPos = seg1.s + seg1.v * t1;

    return true;
}
D3DXVECTOR2を自作したVector2に置き換えただけですが、これで何ができるかもうおわかりでしょう?
最後に編集したユーザー keito94 on 2017年5月01日(月) 15:53 [ 編集 1 回目 ]

アバター
purin52002
記事: 235
登録日時: 8年前

Re: DXライブラリでのVector2の使い方。

投稿記事 by purin52002 » 8年前

数学苦手な私が通りますよ^^
正直全然わからなかったので(ベクトルェ、、、)サイトにいってカンニングしてまいりました。

ズバリ、このコードで線分の衝突判定ができるでしょう!

、、、しかし、線分の衝突判定ってなにか役に立つんですか?(線分ェ、、、)

アバター
keito94
記事: 264
登録日時: 8年前
連絡を取る:

Re: DXライブラリでのVector2の使い方。

投稿記事 by keito94 » 8年前

>>purin52002さん
噂程度なんですが、様々な角度に対応した斜め坂を楽に実装できるらしいですよ…。

アバター
purin52002
記事: 235
登録日時: 8年前

Re: DXライブラリでのVector2の使い方。

投稿記事 by purin52002 » 8年前

私の友達が昔アクションゲームを作ってたんですが、
ななめ坂は衝突判定がめんどくさいって聞いたことがあります。

そのときにこの方法を教えて上げられれば、、、^^;