【问题标题】:Angle offsets and positive/negative angles角度偏移和正/负角度
【发布时间】:2021-07-18 19:24:57
【问题描述】:

我一直坚持使用偏移旋转资产。

Sstart = e.GetPosition(dial);
        
        if (dial.IsStylusCaptured)
        {               
            AngleRot = Math.Atan2((Y - Sstart.Y) , (X - Sstart.X));
            radAngle = AngleRot / Math.PI * 180 + 180;
            radAngle = radAngle - AthetaD;
            di.RenderTransform = new RotateTransform(radAngle + 90);                     
        }  

使用它,我能够将我的对象从 0° 以 x 的偏移量旋转到角度 theta。但是当我进行第二次旋转时,它不是从角度 theta 以偏移 x 旋转,而是将对象重置回 0°。我怎样才能使偏移量始终来自 theta 而不是 0°?

这里我用偏移角度旋转

这里我的角度重置为 0°,而不是从 -56° 移动

【问题讨论】:

  • 很难理解您要达到的目标。也许您需要使用一个简单的函数来接收要旋转的点 (px, py)、旋转的中心点 (cx, cy) 和旋转角度 (alpha) 并返回结果点,如下所示:@987654326 @ ?
  • 我用一些图片更新了我的帖子给你一个例子
  • 好吧,我仍然不了解情况,图片也无济于事。让我们从头开始。您有一个坐标为 x1 和 y1 的点。正确的?你还有一个坐标为 x2, y2 的点。您有一个角度可以相对于第二个点旋转第一个点。旋转后,您将获得第一个点的新坐标。然后您可以对新坐标应用另一个旋转,依此类推。我的描述正确吗?
  • 是的,没错。 x1 和 y1 在我上面的另一行中提到。 x2 和 y2 是在移动过程中生成的,因为它们是基于用户输入的。所以是的,你的描述是准确的。我认为这实际上是我在这里遇到的问题,我认为我的旋转角度没有设置为第一点
  • 你需要在问题中说明圆形和三角形以及线条代表什么以及意图是什么。

标签: c# math rotation


【解决方案1】:

设当前方向向量为(cx, cy)

在开始时将其设置为(1,0) 或其他需要的值。

当你旋转表盘时,你有新的方向

nx = X - Sstart.X
ny = Y - Sstart.Y

要将当前方向矢量旋转到新的方向,您需要计算相对角度。这种方法使用向量的叉积和点积。也许您需要更改第一个表达式的符号

Angle =  Math.Atan2(nx * cy - ny * cx, cx * nx + cy * ny)
..apply rotation by Angle

旋转后记住当前方向以便以后使用

cx = nx
cy = ny

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多