慣性航法で用いられる座標変換をプログラムにしました。ECI座標の初期位置を設定した後、ECI,ECEF,NED,機体座標系の変換を行います。行列計算の方法や値の設定などは、ヘッダーファイル内の記述を見れば分かると思います。 また計算結果はTeratermで確認する事が出来ます。 (行列を見る場合はtoString関数、ベクトルを見る場合はtoString_V関数を使用します)

Dependencies:   mbed

Vector/Vector.h

Committer:
Joeatsumi
Date:
2019-01-30
Revision:
0:6a28eb668082

File content as of revision 0:6a28eb668082:

#pragma once
#include "mbed.h"

class Matrix;

class Vector {
public:
    Vector(int dim);
    ~Vector();
    Vector(const Vector& v);

    Vector& operator=(const Vector& v);
    Vector operator+();
    Vector operator-();
    Vector& operator*=(float c);
    Vector& operator/=(float c);
    Vector& operator+=(const Vector& v);
    Vector& operator-=(const Vector& v);

    void SetComp(int dimNo, float val);
    void SetComps(float* vals);
    float GetNorm() const;
    Vector Normalize() const;
    Vector GetParaCompTo(Vector v);
    Vector GetPerpCompTo(Vector v);

    inline int GetDim() const {
        return dim;
    }

    inline const float* GetpComponents() const {
        return (const float*)components;
    }

    inline float GetComp(int dimNo) const {
        if (dimNo > dim) error("Index Out of Bounds Error !!");
        return components[dimNo-1];
    }

    void CleanUp();

private:
    int dim;
    float* components;

    Vector& operator*=(const Matrix& m);
    Vector& operator*=(const Vector& m);
};

Vector operator+(const Vector& lhv, const Vector& rhv);
Vector operator-(const Vector& lhv, const Vector& rhv);
Vector Cross(const Vector& lhv, const Vector& rhv);
Vector operator*(const float c, const Vector& rhv);
Vector operator*(const Vector& lhv, const float c);
float operator*(const Vector& lhv, const Vector& rhv);