ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 如何在R ^ 2中进行旋转?

2019-06-21 21:18:26  阅读:242  来源: 互联网

标签:php rotation coordinate-systems cartesian


我在数学中遇到了一个看似简单的问题:我需要在二维笛卡尔坐标系中旋转点,即我有一个由(x / y)给出的点和一个角度伽玛,我需要得到坐标如果通过伽玛旋转这一点……

例如:如果x = 2且y = 0且旋转角度为90°,则结果点为x’= 0,y’= -2(顺时针旋转)

所以我在网上找到了这个公式(http://en.wikipedia.org/wiki/Rotation_matrix)并实现了一些代码来测试它:

$x = 1; echo "x: " . $x . "<br>";
$y = 1; echo "y: " . $y . "<br>";
$gamma = 45; echo "gamma: " . $gamma . "<br>";

$sinGamma = sin(deg2rad($gamma));
$cosGamma = cos(deg2rad($gamma));

$x2 = $x*$cosGamma - $y*$sinGamma; echo "x2: " . $x2 . "<br>";
$y2 = $y*$cosGamma + $x*$sinGamma; echo "y2: " . $y2 . "<br>";

虽然这对于90/180/270度的角度来说效果很好,但其他任何东西都会导致完全废话!

即:

如果x = 1且y = 1且gamma = 45°,则结果点将精确地放在x轴上……好吧 – 上面的脚本将输出:

x: 1
y: 1
gamma: 45
x2: 1.11022302463E-16
y2: 1.41421356237

我明白错了吗? (学校很长一段时间对我来说^^)我怎么做到这一点?

解决方法:

你的数字实际上看起来非常正确 – (1,1)围绕原点旋转45度将是(0,sqrt(2)).由于前面的1,x2看起来很奇怪,但是E-16意味着数字实际上是.000000000000000111022或类似的东西.并且sqrt(2)出现在1.414附近.

由于浮点舍入错误,你不会得到确切的结果(更不用说你正在使用无理数).

标签:php,rotation,coordinate-systems,cartesian
来源: https://codeday.me/bug/20190621/1257630.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有