バニラ開発パッケージと SFML の完全な SDK ダウンロードの両方に、ベクター クラスの宣言/定義ファイルが含まれています。ファイル Vector2.hpp および Vector2.inl については、../include/SFML/System/ (いずれかのパッケージ内) を参照してください。回転関数を追加する 1 つの方法は次のとおりです。
次のように、rotate メソッドを Vector2.hpp のクラス宣言に追加します。
...stuff...
template <typename T>
class Vector2
{
public :
....
void Rotate(T angle);
....
};
次に、vector2.inl でメソッドを定義します (規則に従うため)。
template <typename T>
void Vector2<T>::Rotate(T angle) {
...your implementation here...
}
Vector2 クラスを変更する代わりに、Rotate 関数を含む非常に優れた SFML ベースの Thor ライブラリの拡張ベクトル数学関数を利用することもできます。Thor SDK の 2D ベクトル関数を利用するために必要な最小限の (変更されていない) ファイルは次のとおりです。
- ../include/Thor/Vectors/VectorAlgebra2d.hpp
- ../include/トール/詳細/VectorAlgebra2D.inl
- ../include/Thor/Math/Trigonometry.hpp
- ../src/Trigonometry.cpp
これらのファイルをプロジェクト ディレクトリに置くと、次のようにして sf::Vector を回転させることができます。
#include <iostream>
#include <SFML/Graphics.hpp>
#include "VectorAlgebra2D.hpp"
....
sf::Vector2f rotate_THIS(10.0f,10.0f);
thor::Rotate(rotate_THIS, 180.0f); //pass by reference
std::cout << "(" << rotate_THIS.x << ", " << rotate_THIS.y << ")" << std::endl;
sf::Vector2f rotated = thor::RotatedVector(rotate_THIS, 180.0f); //returns object
std::cout << "(" << rotated .x << ", " << rotated .y << ")" << std::endl;
....
どの出力(予想通り):
(-10,-10)
(10,10)
プロジェクトの SFML ベクトル クラス テンプレートを変更する必要があるのと同じプロセスを経て、ソースを調べていくつかの関数 (Length と Dot Product) を追加した後、Thor ライブラリに出くわしました。これまでのところかなり順調です。