【问题标题】:How to get sampling points by rotating a direction in a for loop?如何通过在 for 循环中旋转方向来获取采样点?
【发布时间】:2013-05-10 10:03:32
【问题描述】:

我需要遍历给定数量的采样点。这些采样点是表示方向的归一化向量。它们应该在代码中计算出来。从前向矢量1, 0 开始,我想围绕原点旋转,以便得出给定数量的方向。

for(int i = 0; i < number_of_sampling_points; ++i)
{
    // get direction vector based on i and number_of_sampling_points
    // ...
}

例如,number_of_sampling_points 是循环内的4,我想获取值对1, 00, 1-1, 00, -1。顺序无关紧要。

【问题讨论】:

    标签: c++ for-loop rotation sampling direction


    【解决方案1】:

    试试这个:

    const double PI = 3.14159265358979323846;
    const int number_of_sampling_points = 4;
    for (int i = 0; i < number_of_sampling_points; ++i)
    {
        const double a = PI * 2 * (1.0 - i) / number_of_sampling_points;
    
        double x = sin(a);
        double y = cos(a);
    
        cout << "(" << x << " , " << y << ")" << endl;
    }
    

    输出(四舍五入):

    (1 , 0)
    (0 , 1)
    (-1 , 0)
    (0 , -1)
    

    【讨论】:

    • 1.0 - i 对 Pubby 的解决方案有何不同?他只是将i 加倍,但没有从1 中减去它。此外,变量a 是否有一个有意义的名称?它代表什么?
    • 1.0 - i 按照你写的顺序排列结果(但是你说没关系)。 a 这个名字没什么特别的,我用a 让我的代码更具可读性(在我看来)。
    【解决方案2】:

    使用触发器:

    double x = std::cos(pi * 2 * (double)i / (double)number_of_sampling_points);
    double y = std::sin(pi * 2 * (double)i / (double)number_of_sampling_points);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-25
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多