当前位置: 首页 > 面试题库 >

从变换矩阵中找到角度

卫泉
2023-03-14
问题内容

我有一个具有这样的值的变换矩阵。

分别转换:xx,xy,yx,yy,tx和ty。

如何从上述给定值集中找到角度。


问题答案:

如果仅关于旋转,则可以使用给定的矩阵对向量(1,0)进行变换,并计算所得向量与x轴之间的角度,如原始问题的注释中已经提到的那样。

import java.awt.Point;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.util.Random;


public class ExtractRotation
{
    public static void main(String[] args)
    {
        for (int i=0; i<=180; i++)
        {
            double angleRad = Math.toRadians(i);
            AffineTransform at = createRandomTransform(angleRad);
            double extractedAngleRad = extractAngle(at);
            System.out.println(
                "In: "+Math.toDegrees(angleRad)+ " " +
                "Out "+Math.toDegrees(extractedAngleRad));
        }
    }

    private static double extractAngle(double m[])
    {
        return extractAngle(new AffineTransform(m));
    }
    private static double extractAngle(AffineTransform at)
    {
        Point2D p0 = new Point();
        Point2D p1 = new Point(1,0);
        Point2D pp0 = at.transform(p0, null);
        Point2D pp1 = at.transform(p1, null);
        double dx = pp1.getX() - pp0.getX();
        double dy = pp1.getY() - pp0.getY();
        double angle = Math.atan2(dy, dx);
        return angle;
    }

    private static Random random = new Random(0); 
    private static AffineTransform createRandomTransform(double angleRad)
    {
        AffineTransform at = new AffineTransform();
        double scale = 1.0;
        at.translate(randomDouble(), randomDouble());
        scale = Math.abs(randomDouble());
        at.scale(scale, scale);
        at.rotate(angleRad);
        at.translate(randomDouble(), randomDouble());
        scale = Math.abs(randomDouble());
        at.scale(scale, scale);
        return at;
    }

    private static double randomDouble()
    {
        return -5.0 + random.nextDouble() * 10;
    }


}


 类似资料:
  • 变换矩阵 之前三节所说的坐标变换的三种方式——平移translate(),缩放scale(),以及旋转rotate()都可以通过transform()做到。 在介绍矩阵变换transform()前,我们来说一说什么是变换矩阵。 以上是Canvas中transform()方法所对应的变换矩阵。而此方法正是传入图中所示的六个参数,具体为context.transform(a,b,c,d,e,f)。 各

  • Three.js使用matrix编码3D变换 —— 平移(位置),旋转和缩放。 Object3D的每个实例都有一个matrix,用于存储该对象的位置,旋转和比例。本页介绍如何更新对象的变换。 便利的属性和matrixAutoUpdate(Convenience properties and matrixAutoUpdate) 有两种方法可以更新对象的转换: 修改对象的position,quater

  • 成员变量 变量 类型 名称 备注 matrix Object 矩阵 scale Object 缩放 position Object 位置 rotation Object 旋转 localPivot Object 中枢 localAnchor Object 锚点 矩阵 例子: var tex = new BK.Texture("GameRes://resource/texture/star.png"

  • 问题内容: 我正在使用阴影中的形状生成使用安装在移动平台上的相机拍摄的图像的数字地形模型(DTM)。用Python编写的算法似乎运行得很好,但是输出是倾斜的并且有点球形,所以我怀疑我需要从DTM中消除透视失真和桶形。 如果有人对此感兴趣,可以在这里获得数据。 摄像机以41度倾斜安装,并具有以下摄像机和失真矩阵: 如何应用透视变换并从此矩阵中消除桶形失真以获得平坦的DTM? 我已经尝试过使用Open

  • 这是它的要点,你可以看到旋转角度从0-236然后跳119-0,很奇怪。 我想得到一个模型相对于其y轴的角度,单位为度(0-360)。然而,到目前为止,使用libgdx,我无法使用以下方法获得预期结果: 假设我只围绕y轴旋转,这是从libgdx中的变换矩阵中获取旋转角度的正确方法吗? 我已经包含了一个完整的示例类来证明我从以这种方式获得旋转中获得的角度不是预期的,而不是0-360的完整旋转,我得到类

  • 特殊矩阵——三对角矩阵(Tridiagonal Matrix) 注:压缩存储的矩阵可以分为特殊矩阵和稀疏矩阵。对于那些具有相同元素或零元素在矩阵中分布具有一定规律的矩阵,被称之为特殊矩阵。对于那些零元素数据远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称之为稀疏矩阵。 1. 三对角矩阵的概念 三对角矩阵就是对角线、邻近对角线的上下次对角线上有元素,其他位置均为0的矩阵。 三对角矩阵是一种特