90741


提示コードはベクトルの方向と原点`(1,0)`のベクトルのなす角を求めてそのベクトルの方向を中心に扇形を描画するコードです。

ベクトル`(0,1)`の時は真下の描画されるのですがベクトル`(-1,0)`の時はコンソールログの通りラジアンの値が`PI`の値である`3.14`になりません。これはなぜでしょうか？

原点のベクトルの真逆なので180度つまり`PI`の値が返ってくるはずなのですが原因がわかりません。

[![画像の説明をここに入力](https://i.stack.imgur.com/KBLyU.png)](https://i.stack.imgur.com/KBLyU.png)

##### 試行錯誤したいこと

紙の上で計算  
値を表示

##### 参考サイト

２つのベクトルのなす角を求める：  
<http://www.sousakuba.com/Programming/gs_two_vector_angle.html>

##### コンソールログ

[code]

    cos() -0.25
    vector.length() 2
    rad 1.82348
    
    cos() -0.25
    vector.length() 2
    rad 1.82348
    
    cos() -0.25
    vector.length() 2
    rad 1.82348
    
    cos() -0.25
    vector.length() 2
    rad 1.82348
    
    cos() -0.25
    vector.length() 2
    rad 1.82348
    
    cos() -0.25
    vector.length() 2
    rad 1.82348
    
    
[/code]

##### ソースコード

[code]

    ※作り途中の関数のため引数の値を利用していません。
    void SDL::Sector_Render::Render_Sector(const glm::vec2 vec, const float radian)
    {
    
        const glm::vec2 origin = glm::vec2(1, 0);
        //glm::vec2 vector = glm::vec2(0, 1); //向き
        glm::vec2 vector = glm::vec2(-1, 0); //向き
        //glm::vec2 vector = glm::vec2(0, -1); //向き
        float rr = glm::dot(vector,origin) / (origin.length() * vector.length());
        //float rr = glm::dot(vector,origin) / (origin.length() * vector.length());
    
        std::cout<<"cos() "<<rr<<std::endl;
    
        float rad = glm::acos(rr);
    
        std::cout<<"vector.length() "<<vector.length()<<std::endl;
        std::cout<<"rad "<< rad<<std::endl;
        //std::cout<<PI<<std::endl;
    
        std::cout<<std::endl;
    
        float f = PI / 6000.0f;
        float r = rad / 2.0f;
    
        for (float i = rad - r; i < (PI * 2.0f); i += f)
        {
            for (int j = 0; j < range; j++)
            {
                float cos = glm::cos(i) * j + transform.position.x;
                float sin = glm::sin(i) * j + transform.position.y;
    
                glm::vec2 end = glm::vec2(0, 0);
                end.x = cos;
                end.y = sin;
    
                SDL_SetRenderDrawColor(render, color.x, color.y, color.z, color.w);
                SDL_RenderDrawPoint(render, end.x, end.y);
                SDL_SetRenderDrawColor(render, 0, 0, 0, 255);
            }
    
            if (i > rad + r)
            {
                break;
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2022-08-24T23:46:07.590
90740
2022-08-25T01:10:28.650
2022-08-25T01:10:28.650
3060
question
c++ 数学
ベクトルの向く方向に扇形を表示させたい。


`glm::vec2` の `length` はベクトルの次元を返す関数です。 つまりこの場合は常に `2` が返されるので期待した結果にはなりません。

ベクトルの長さを知りたいならば `glm::length` を用いてください。


CC BY-SA 4.0
2022-08-25T01:04:19.400
90741
2022-08-25T01:04:19.400
3364
90740
answer