Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 二维坐标旋转-图像扭曲_Math_Rotation_Coordinates_Trigonometry_Distortion - Fatal编程技术网

Math 二维坐标旋转-图像扭曲

Math 二维坐标旋转-图像扭曲,math,rotation,coordinates,trigonometry,distortion,Math,Rotation,Coordinates,Trigonometry,Distortion,我有一个箭头,用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 $pts = array( array( -85, 0 ), array( -25, 50 ), array( -25, 15 ), array( 85, 15 ), arr

我有一个箭头,用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
$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 );
}
这形成了一个图像

下面是我旋转点的(PHP)代码:

-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
$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
生成的图像

我的数学有什么错?我希望它应该有90度角,等等

谢谢大家!! 赛斯

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

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

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

你的数学没有问题-你的图形中X和Y坐标轴上的刻度不一样:)

你的数学没有问题-你的图形中X和Y坐标轴上的刻度不一样:)

啊!我只是调整了它,使它成为一个正方形的图像,结果是正确的!非常感谢。有什么方法可以这样做,我仍然可以有一个矩形箭头?我不知道你的意思。。。什么是矩形箭头?关键是,X轴和Y轴上的比例(这里是每个像素的单位)必须相同,才能使图像不失真。恐怕我不知道如何告诉你的绘图程序这样做。我缩小了箭头的长度,所以X和Y上的最大点现在都是最大100点。不过,我希望箭的箭杆更长一些。我能在数学上做些什么来补偿吗?当然-改变图表的大小:)我试过你的第一个箭头,它的图表面积是1200 x 800,看起来很对。啊!我只是调整了它,使它成为一个正方形的图像,结果是正确的!非常感谢。有什么方法可以这样做,我仍然可以有一个矩形箭头?我不知道你的意思。。。什么是矩形箭头?关键是,X轴和Y轴上的比例(这里是每个像素的单位)必须相同,才能使图像不失真。恐怕我不知道如何告诉你的绘图程序这样做。我缩小了箭头的长度,所以X和Y上的最大点现在都是最大100点。不过,我希望箭的箭杆更长一些。在我的数学中有什么可以弥补的吗?当然-改变图表的大小:)我尝试了你的第一个箭头,图形区域是1200 x 800,它看起来差不多正确。