これの続きです。
自作の二次元ベクトルライブラリの実装(と入ってもソースをプロジェクトに入れるだけだけど)を作ってみました。
(前にも言ったようにC++の簡単な知識さえあれば、意外と楽に作れるものなんですが…。)
二次元ベクトルの知識がなくてもOKですので自由に使ってください。(ライセンスフリーです。)
こちらで配布しています。
では楽しいDXライブラリプログラムライフを^^
追記:DIXQさんのご指摘を受けて、少し修正しました。
Vector2ライブラリを作ったので公開してみる。
Vector2ライブラリを作ったので公開してみる。
最後に編集したユーザー keito94 on 2017年5月20日(土) 12:16 [ 編集 1 回目 ]
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
Re: Vector2ライブラリを作ったので公開してみる。
これはライブラリとは言いません。
public変数はやめましょう
public変数はやめましょう
Re: Vector2ライブラリを作ったので公開してみる。
了解です…。
少し説明を修正したいと思います。
ですが、x,yをpublic変数にしているのは、DriectXのD3DXVECTOR2との互換性を考慮したからです。
少し説明を修正したいと思います。
ですが、x,yをpublic変数にしているのは、DriectXのD3DXVECTOR2との互換性を考慮したからです。
最後に編集したユーザー keito94 on 2017年5月20日(土) 12:28 [ 編集 1 回目 ]
- purin52002
- 記事: 235
- 登録日時: 8年前
Re: Vector2ライブラリを作ったので公開してみる。
ソース拝見しました。
きれいにかけていると思います^^
ただ、operator*の内容がちょっと気になりました。
「x、yをメンバに持つ構造体のオペレータ」としてなら正しいと思うのですが、「二次元ベクトルのオペレータ」と考えると積、商の計算方法が間違ってるような気がします。
内積、外積、その他ベクトル演算ができてくれると嬉しいです。
あと個人的にヘッダオンリーなライブラリが好きです^p^
きれいにかけていると思います^^
ただ、operator*の内容がちょっと気になりました。
「x、yをメンバに持つ構造体のオペレータ」としてなら正しいと思うのですが、「二次元ベクトルのオペレータ」と考えると積、商の計算方法が間違ってるような気がします。
内積、外積、その他ベクトル演算ができてくれると嬉しいです。
あと個人的にヘッダオンリーなライブラリが好きです^p^
Re: Vector2ライブラリを作ったので公開してみる。
>public変数はやめましょう
こういうのは用途上,メンバがpublicでも問題ない類のもの(struct的な扱いのもの)だと思うけど.
(メンバにフルアクセスされて困るようなクラスではない)
(わざわざ隠蔽する利点は,メンバを float[2] で持つ形とかに変更できるくらい?)
どちらかと言えば,メンバがpublicであることよりも
constメンバ関数であるべきものがconstになっていない問題のせいで使い物にならないような.
ベクトルの演算を行う際には
・長さを得る
・長さの2乗値を得る (←実質,「長さ」が欲しいという話だけれども,わざわざルートをとらなくても目的を達せられる場面というのは多い)
・正規化(長さ1にする)
・単位ベクトルを返す
…みたいな操作は高頻度で使うので,他の公開メソッドを使えば実現できるものだとしても,メンバ関数に加えてしまうと便利かと.
あとは,「あるベクトルと直交するベクトルを返す」ヘルパとかがあると便利かな.
こういうのは用途上,メンバがpublicでも問題ない類のもの(struct的な扱いのもの)だと思うけど.
(メンバにフルアクセスされて困るようなクラスではない)
(わざわざ隠蔽する利点は,メンバを float[2] で持つ形とかに変更できるくらい?)
どちらかと言えば,メンバがpublicであることよりも
constメンバ関数であるべきものがconstになっていない問題のせいで使い物にならないような.
ベクトルの演算を行う際には
・長さを得る
・長さの2乗値を得る (←実質,「長さ」が欲しいという話だけれども,わざわざルートをとらなくても目的を達せられる場面というのは多い)
・正規化(長さ1にする)
・単位ベクトルを返す
…みたいな操作は高頻度で使うので,他の公開メソッドを使えば実現できるものだとしても,メンバ関数に加えてしまうと便利かと.
あとは,「あるベクトルと直交するベクトルを返す」ヘルパとかがあると便利かな.
Re: Vector2ライブラリを作ったので公開してみる。
オフトピック
D3DXやXNAの後継としては、DirectX Mathがあります。
OpenGL Mathematics(GLM)というのもあります。
DirectX MathはSIMD最適化を優先していて、汎用ベクタ型のロード/ストアが明示的に必要なので、ラッパは有用かもしれません。
WindowsでもAndroidでも使える(ようになった)DXライブラリでは、コードの共通化という点でGLMが優位でありましょう。
OpenGL Mathematics(GLM)というのもあります。
DirectX MathはSIMD最適化を優先していて、汎用ベクタ型のロード/ストアが明示的に必要なので、ラッパは有用かもしれません。
WindowsでもAndroidでも使える(ようになった)DXライブラリでは、コードの共通化という点でGLMが優位でありましょう。
Re: Vector2ライブラリを作ったので公開してみる。
なんだったら自分で作ってもいいのよ?usao さんが書きました: あとは,「あるベクトルと直交するベクトルを返す」ヘルパとかがあると便利かな.
Re: Vector2ライブラリを作ったので公開してみる。
>なんだったら自分で作ってもいいのよ?
そういったヘルパ的なものまではこのライブラリの範疇ではない という思想(?)なのかな?
まぁそこらへんの線引きは結構難しいですよね.
あれもこれもとやりすぎるとごてごてするし,なさ過ぎると利便性が無いものになるし.
そういったヘルパ的なものまではこのライブラリの範疇ではない という思想(?)なのかな?
まぁそこらへんの線引きは結構難しいですよね.
あれもこれもとやりすぎるとごてごてするし,なさ過ぎると利便性が無いものになるし.