c++ - 将任意梯度旋转 90 度的算法

标签 c++ rotation trigonometry

我正在尝试一些基本的光线追踪,并且我有一个 2D 渐变(称为 dybydx)。我从正方形的中心开始追踪,0.5、0.5,并希望设置垂直于梯度的额外追踪以增加观察范围(~< 0.5)。我对 fp 算法还很陌生,这让我在调试时有些头疼。

我希望下面的代码能解释剩下的部分:

        if (incX) {
        if (incY) {
            if (cclockwise) {
                x -= System::Math::Sin(theta) / 2;
                y += System::Math::Cos(theta) / 2;
            } else {
                x += System::Math::Sin(theta) / 2;
                y -= System::Math::Cos(theta) / 2;
            }
        } else {
            if (cclockwise) {
                x += System::Math::Cos(theta) / 2;
                y += System::Math::Sin(theta) / 2;
            } else {
                x -= System::Math::Cos(theta) / 2;
                y -= System::Math::Sin(theta) / 2;
            }
        }
    } else {
        if (incY) {
            if (cclockwise) {
                x -= System::Math::Cos(theta) / 2;
                y -= System::Math::Sin(theta) / 2;
            } else {
                x += System::Math::Cos(theta) / 2;
                y += System::Math::Sin(theta) / 2;
            }
        } else {
            if (cclockwise) {
                x += System::Math::Sin(theta) / 2;
                y -= System::Math::Cos(theta) / 2;
            } else {
                x -= System::Math::Sin(theta) / 2;
                y += System::Math::Cos(theta) / 2;
            }
        }
    }

我在纸上绕过象限,但我忘记了 Windows 反转了传统的 y 轴(因此我认为顺时针方向不是,但这是一个任意错误且不重要)。我真正想要的是一种将渐变旋转 90 度的万无一失的方法。谢谢。

edit-- theta 是渐变(在纸上)从水平轴到 +ve y 轴的角度。

edit-- incX 和 incY 表示原始梯度(真的,真的)分别在 X 和 Y 方向增加。

最佳答案

如果您在@dario_ramos 方程中代入 90 度,您会得到:

x' = -y
y' = x

顺便说一句,如果你曾经在格子纸上画过这个,你就会明白为什么它如此微不足道。

关于c++ - 将任意梯度旋转 90 度的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794938/

相关文章:

javascript - ThreeJS X 旋转行为异常

rotation - 如何围绕其自身边界的中心旋转 UIBezierPath?

jquery - 如何使用 jQuery 和 CSS 根据鼠标移动向左和向右旋转元素

search - 您如何有效地实现文档相似性搜索系统?

C++ - 精确时间 vector

c++ - 为什么 std::span 会重载函数调用运算符以进行索引?

c++ - vector 多重定义链接错误

c++ - 如何将十六进制字符串转换为 Uint8

algorithm - 如何获得圆的下界和上界半径?

ios - 让 Swift 假设三角函数计算的度数