【问题标题】:2D Coordinate rotation - image distorted2D 坐标旋转 - 图像失真
【发布时间】:2013-04-12 14:33:11
【问题描述】:

我有一个箭头,表示为 X,Y 点,我想旋转 25 度。我的箭头旋转了,但它不再好看。角度不再是应有的 90 度。要点:

-85.0,0.0
-25.0,50.0
-25.0,15.0
85.0,15.0
85.0,-15.0
-25.0,-15.0
-25.0,-50.0
-85.0,0.0

这会生成一个图像that looks like this

这是我的 (PHP) 代码来旋转点:

$pts = array(
    array( -85, 0 ),
    array( -25, 50 ),
    array( -25, 15 ),
    array( 85, 15 ),
    array( 85, -15 ),
    array( -25, -15 ),
    array( -25, -50 ),
    array( -85, 0 ),
);

$rotate = deg2rad( 25 );
$sin = sin( $rotate );
$cos = cos( $rotate );

foreach( $pts as $xy ) {
    list( $x, $y ) = $xy;

    // Rotate
    $x2 = ( $x * $cos ) - ( $y * $sin );
    $y2 = ( $x * $sin ) + ( $y * $cos );

    printf( "%0.3f, %0.3f\n", $x2, $y2 );
}

输出:

-77.036, -35.923
-43.789, 34.750
-28.997, 3.029
70.697, 49.517
83.375, 22.328
-16.318, -24.160
-1.527, -55.881
-77.036, -35.923

生成的图像no longer looks good

我在数学上做错了什么?我希望它在应该有 90 度角的地方仍然有,等等。

谢谢! 赛斯

编辑:本练习的其余部分是将点转换为纬度/经度坐标,以便在 Google 地球中显示。翻译代码:

$x2 = ( $x2 * $scale ) + $latref;
$y2 = ( $y2 * $scale ) + $lonref;

我的“真正”问题是(正如@joel-in-go 指出的那样),纬度和经度之间的物理距离不相等吗?

【问题讨论】:

    标签: math rotation coordinates trigonometry distortion


    【解决方案1】:

    您的数学没有问题 - 图表中 X 和 Y 坐标轴上的比例不一样 :)

    【讨论】:

    • 啊!我刚刚调整了它,所以它是一个正方形的图像,结果是正确的!谢谢!有没有办法做到这一点,所以我仍然可以有一个矩形箭头?
    • 我不确定你的意思...什么是矩形箭头?
    • 重点是,X 轴和 Y 轴上的比例(此处为每像素单位)必须相同,图像才不会失真。恐怕我不知道如何告诉你的绘图程序这样做。
    • 我缩小了箭头的长度,因此 X 和 Y 上的最大点现在都为 100 点。 Looks right。不过,我希望箭杆更长。我的数学有什么可以弥补的吗?
    • 当然 - 改变图形的大小 :) 我尝试了你的第一个箭头,图形区域为 1200 x 800,它看起来差不多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多