PHP-如何获得旋转后点的坐标?

PHP-如何获得旋转后点的坐标?,php,rotation,coordinates,imagick,Php,Rotation,Coordinates,Imagick,我希望图像中的眼睛是水平的 $rightEyeY = 446; $rightEyeX = 625; $leftEyeY = 433; $leftEyeX = 733; // Get middle point of two eyes $y = $rightEyeY - $leftEyeY; $x = $rightEyeX - $leftEyeX; $angle = rad2deg(atan2($y, $x)) - 180; // -6.8 degrees $manager = new Ima

我希望图像中的眼睛是水平的

$rightEyeY = 446;
$rightEyeX = 625;
$leftEyeY = 433;
$leftEyeX = 733;

// Get middle point of two eyes
$y = $rightEyeY - $leftEyeY;
$x = $rightEyeX - $leftEyeX;

$angle = rad2deg(atan2($y, $x)) - 180; // -6.8 degrees

$manager = new ImageManager(['driver' => 'imagick']);
$image = $manager->make('image.jpg')->rotate($angle);
$a = $angle * pi() / 180.0;
$cosa = cos($a);
$sina = sin($a);
$x = $x * $cosa - $y * $sina; // This one calculates x of the middle point not each eye.
$y = $x * $sina + $y * $cosa; // This one calculates y of the middle point not each eye.
旋转后如何获得每只眼睛的坐标

我希望这些变量在顶部

FROM:
rightEyeY=446

rightEyeX=625

leftEyeY=433

leftEyeX=733

TO:
rightEyeY=432

rightEyeX=640

leftEyeY=432


leftEyeX=749

我尝试了一些东西,但得到了其他坐标。它看起来很适合我。诀窍是旋转平移到中心。我认为差异来自于-6.83的角度是错误的(操作码中的眼睛距离)

如果不平移,则旋转将在坐标系的原点(0,0)处完成,该原点位于图像空间的左上角,但您需要中心

$angle=deg2rad(-6.83);
列表($leftX,$leftY)=$rotateEye($LEFTEYX,$LEFTEYY,$angle);
列表($rightX,$rightY)=$rotateEye($rightEyeX,$rightEyeY,$angle);
给我

L: (734.56131177907, 734.56131177907)
R: (628.87375746869, 418.91568508316)
但图像看起来是这样的,左边是蓝色,右边是红色。底部一对为原点,顶部一对旋转-6.83度

二维旋转矩阵与平移编码

$rotateEye=函数($x,$y,$angle)使用($centerX,$centerY):数组{
$tx=$x-$centerX;
$ty=$y-$centerY;
$rx=cos($angle)*$tx-sin($angle)*$ty;
$ry=sin($angle)*$tx+cos($angle)*$ty;
返回[$rx+$centerX,$ry+$centerY];
};

这里是完整代码的一部分。

中间点将被
$rightEyeY-$leftEyeY
旋转后如何获得每只眼睛的坐标?
-为什么不旋转每只眼睛?正如中所指出的,在计算中使用它们的同时,您正在计算
$x
$y
。@NigelRen他正在进行减法,然后进行加法。但我正在这么做。我只是计算并把它放在变量中。即使我更改了变量名,也不会影响结果,您更改了
$x
的值,这肯定会影响下一个结果
$y=$x*$sina+$y*$cosa,它依赖于原始的x坐标。旋转后,它的宽度和高度似乎变大了。因为旋转不在后面,而是延伸了宽度和高度。在旋转过程中,是否可以防止图像中的这种延伸?如上所述,这取决于旋转中心。想象每只眼睛都有一个投影圆,它看起来对我来说是正确的。您没有提供原始图像大小,因此我假设为800x800。不同图像中的大小不同。但这个是1500x1125。在Photoshop中,当我旋转图像时,它会隐藏在后面。但在Imagick中,它使工作空间更大。我找不到任何方法来设置中心点。Photoshop总是围绕中心旋转并进行剪切,因此图像不会增长。使用imagick时,您需要自己剪辑。寻找和。拥有完整的其他维度当然会产生不同的值,因为旋转中心不同。我很肯定,通过测试,我的答案是正确的。旋转后的图像大小必须相同,以匹配正确的坐标,或者需要添加新的偏移。(newSizeX-oldSizeX)/2和Y相同。