65354


DxLib3D(DirectX)です。.cpp部のクォータニオン掛け算部の関数のreturn文のPositin::mul();部の関数を定義したいのですが引数にスカラー、ベクトルを入れてその計算をさせたいのですがタイトル通り
**スカラーｘベクトルの計算式** がわかりません ゲーム数学でしょうか？ 3次元です。

[![画像の説明をここに入力](https://i.stack.imgur.com/cPFhj.png)](https://i.stack.imgur.com/cPFhj.png)  
mainループでキー入力で使う予定の関数

[code]

    /*X軸回転*/
    void rotate_X(float *x,float *y,float *z,const float ang, const float mx,const float my,const float mz)
    {
    
        Quaternion P(0,Position(*x - mx, *y - my, *z - mz));//回転させる点
        Position v(1,0,0);//回転させる軸
    
        Quaternion Q(cos(ang / 2), Position(v.x * sin(ang / 2), v.y * sin(ang / 2), v.z * sin(ang / 2)));
        Quaternion R(cos(ang / 2), Position(-v.x * sin(ang / 2) , -v.y * sin(ang / 2), -v.z * sin(ang / 2)));
    
        Quaternion result = R * Q * P;
    
    }
    
[/code]

Position.hpp部

[code]

    #ifndef ___POSITION_H
    #define ___POSITION_H
    
    //template<typename type>
    class Quaternion
    {
    public:
    
        /*実部*/
        float a;
    
        /*虚部*/
    //  Position<type> v;
        Position v;
    
        Quaternion(float aa, Position vv);
    
        static Quaternion mul(Quaternion a, Quaternion b);//掛け算
    
    
    
    };
    
    
    
    //template<typename type>
    class Position
    {
    private:
    
    
    
    
    public:
        float x;
        float y;
        float z;
    
        Position(float xx, float yy, float zz);
        Position();
    
    
    
    
        static Position cross(Position a, Position b);//外積
        static float dot(Position a,Position b);//内積
    
    
    
    
    
    
    
    
    };
    
    #endif
    
[/code]

Position.cpp部

[code]

    /*クォータニオン*/
    
    Quaternion::Quaternion(float aa,Position vv)
    {
        a = aa;
    
        v.x = vv.x;
        v.y = vv.y;
        v.z = vv.z;
    }
    
    /*クォータニオンの掛け算部　　　　　　Position::mul()は実装してませんよってコンパイルエラー　*/
    Quaternion Quaternion::mul(Quaternion a, Quaternion b)
    {
        return Quaternion(a.a + b.a - (Position::dot(a.v,b.v)),Position(Position::mul(a.a , b.v) + Position::mul(b.a , a.v) + Position::cross(a.v,b.v)));
    }
    
    /*外積*/
    Position Position::cross(Position a,Position b)
    {
        return Position(a.y * b.y - b.y * a.z,
                                (-1) * (a.x * b.z - b.x * a.z),
                                    a.x * b.y  - b.x * a.y);
    }
    
    /*内積*/
    float Position::dot(Position a, Position b)
    {
        return (a.x * b.x) + (a.y * b.y) + (a.z * a.z);
    }
    
    /*座標系*/
    
    //template<typename type>
    Position::Position(float xx,float yy,float zz)
    {
        x = xx;
        y = yy;
        z = zz;
    }
    
    
    
    //template<typename type>
    Position::Position()
    {
        x = 0.0f;
        y = 0.0f;
        z = 0.0f;
    }
    
[/code]


CC BY-SA 4.0
2020-04-04T08:27:05.700
65349
2020-04-04T12:56:10.300
2020-04-04T08:50:10.073
question
c++
ゲーム数学3D ベクトルｘスカラーをどのように計算するのか知りたい。関数の作り方で困ってます。


ベクトルのスカラー倍は要素ごとにそのスカラー倍したものです。

**v** = (x, y) として、  
2・ **v** = v + v = (x + x, y + y) = (2・x, 2・y)  
k・ **v** = (k・x, k・y)


CC BY-SA 4.0
2020-04-04T12:56:10.300
65354
2020-04-04T12:56:10.300
20885
65349
answer