栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从变换矩阵中找到角度

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从变换矩阵中找到角度

如果仅关于旋转,则可以使用给定的矩阵对向量(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;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号