Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
SVG坐标转换_Svg_Coordinate Transformation - Fatal编程技术网

SVG坐标转换

SVG坐标转换,svg,coordinate-transformation,Svg,Coordinate Transformation,为什么这个SVG内联代码不产生一个框60,中间有一个点? 我想使用SVG在常规笛卡尔坐标图上绘制项目。我的数据是可显示地图的大小和笛卡尔主地图上的中心点 <svg xmlns="http://www.w3.org/2000/svg" width="60" height="40" viewBox="0 0 60 40"> <g transform="translate(-470,480) scale(1,-1)"> <circle title="Cente

为什么这个SVG内联代码不产生一个框60,中间有一个点?

我想使用SVG在常规笛卡尔坐标图上绘制项目。我的数据是可显示地图的大小和笛卡尔主地图上的中心点

<svg xmlns="http://www.w3.org/2000/svg" width="60" height="40" viewBox="0 0 60 40">
  <g transform="translate(-470,480) scale(1,-1)">
    <circle title="Center" cx="500" cy="500" r="3" fill="red"/>
  </g>
</svg>

您的代码正在创建一个60 x 40像素的SVG,然后:

  • 画一个以(500500)为中心的圆
  • 缩放变换将圆移动到(500,-500)
  • “平移”变换将其移动到(30,-20)

如果您将转换更改为
transform=“translate(-470520)scale(1,-1)”
您应该得到我认为您想要的内容。

您的代码正在创建一个60 x 40像素的SVG,然后:

  • 画一个以(500500)为中心的圆
  • 缩放变换将圆移动到(500,-500)
  • “平移”变换将其移动到(30,-20)

如果将转换更改为
transform=“translate(-470520)scale(1,-1)”
您应该会得到我认为您想要的结果。

我提出了这个代码片段,它将创建一个具有笛卡尔坐标的地图,并使用这些坐标在SVG窗口中绘制它们。希望这能帮助别人

该函数将地图的中心取为$x、$y,并围绕该坐标绘制地图

    public static function xyMap( $x, $y, $width = 0, $height = 0, $show = array('X')) {

    $minx = $x - ($width / 2);
    $maxx = $x + ($width / 2);

    if ($minx < 0) {
        $minx = 0;
        $maxx = $width;
    } elseif ($maxx > Yii::app()->params['maxMapX']) {
        $maxx = Yii::app()->params['maxMapX'];
        $minx = Yii::app()->params['maxMapX'] - $width;
    }

    $miny = $y - ($height / 2);
    $maxy = $y + ($height / 2);

    if ($miny < 0) {
        $miny = 0;
        $maxy = $height;
    } elseif ($maxy > Yii::app()->params['maxMapY']) {
        $maxy = Yii::app()->params['maxMapY'];
        $miny = Yii::app()->params['maxMapY'] - $height;
    }


    $x_xform = -1 * $minx;
    $y_xform = $maxy;

    $x_scale = 1;
    $y_scale = -1;

    echo "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"$width\" height=\"$height\" viewBox=\"0 0 $width $height\">\n";
    echo "<g transform=\"translate($x_xform, $y_xform) scale($x_scale,$y_scale)\">\n";
    echo "<rect x=\"$minx\" y=\"$miny\" width=\"$width\" height=\"$height\" stroke=\"black\" stroke-width=\"2\" fill=\"white\" />\n";
    echo "<circle title=\"Center\" cx=\"$x\" cy=\"$y\" r=\"3\" fill=\"red\"/>\n";
    echo "</g>\n</svg>\n";

}
公共静态函数xyMap($x,$y,$width=0,$height=0,$show=array('x')){
$minx=$x-($width/2);
$maxx=$x+($width/2);
如果($minx<0){
$minx=0;
$maxx=$width;
}elseif($maxx>Yii::app()->params['maxmappx'])){
$maxx=Yii::app()->params['maxmappx'];
$minx=Yii::app()->params['maxmappx']-$width;
}
$miny=$y-($height/2);
$maxy=$y+($height/2);
如果($miny<0){
$miny=0;
$maxy=$height;
}elseif($maxy>Yii::app()->params['maxMapY'])){
$maxy=Yii::app()->params['maxMapY'];
$miny=Yii::app()->params['maxMapY']-$height;
}
$x_xform=-1*$minx;
$y_xform=$maxy;
$x_比例=1;
$y_比例=-1;
回音“\n”;
回音“\n”;
回音“\n”;
回音“\n”;
回显“\n\n”;
}

我提出了这个代码片段,它将创建一个具有笛卡尔坐标的地图,并使用这些坐标在SVG窗口中绘制它们。希望这能帮助别人

该函数将地图的中心取为$x、$y,并围绕该坐标绘制地图

    public static function xyMap( $x, $y, $width = 0, $height = 0, $show = array('X')) {

    $minx = $x - ($width / 2);
    $maxx = $x + ($width / 2);

    if ($minx < 0) {
        $minx = 0;
        $maxx = $width;
    } elseif ($maxx > Yii::app()->params['maxMapX']) {
        $maxx = Yii::app()->params['maxMapX'];
        $minx = Yii::app()->params['maxMapX'] - $width;
    }

    $miny = $y - ($height / 2);
    $maxy = $y + ($height / 2);

    if ($miny < 0) {
        $miny = 0;
        $maxy = $height;
    } elseif ($maxy > Yii::app()->params['maxMapY']) {
        $maxy = Yii::app()->params['maxMapY'];
        $miny = Yii::app()->params['maxMapY'] - $height;
    }


    $x_xform = -1 * $minx;
    $y_xform = $maxy;

    $x_scale = 1;
    $y_scale = -1;

    echo "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"$width\" height=\"$height\" viewBox=\"0 0 $width $height\">\n";
    echo "<g transform=\"translate($x_xform, $y_xform) scale($x_scale,$y_scale)\">\n";
    echo "<rect x=\"$minx\" y=\"$miny\" width=\"$width\" height=\"$height\" stroke=\"black\" stroke-width=\"2\" fill=\"white\" />\n";
    echo "<circle title=\"Center\" cx=\"$x\" cy=\"$y\" r=\"3\" fill=\"red\"/>\n";
    echo "</g>\n</svg>\n";

}
公共静态函数xyMap($x,$y,$width=0,$height=0,$show=array('x')){
$minx=$x-($width/2);
$maxx=$x+($width/2);
如果($minx<0){
$minx=0;
$maxx=$width;
}elseif($maxx>Yii::app()->params['maxmappx'])){
$maxx=Yii::app()->params['maxmappx'];
$minx=Yii::app()->params['maxmappx']-$width;
}
$miny=$y-($height/2);
$maxy=$y+($height/2);
如果($miny<0){
$miny=0;
$maxy=$height;
}elseif($maxy>Yii::app()->params['maxMapY'])){
$maxy=Yii::app()->params['maxMapY'];
$miny=Yii::app()->params['maxMapY']-$height;
}
$x_xform=-1*$minx;
$y_xform=$maxy;
$x_比例=1;
$y_比例=-1;
回音“\n”;
回音“\n”;
回音“\n”;
回音“\n”;
回显“\n\n”;
}

谢谢。我在翻译min-y而不是max-y!谢谢我在翻译min-y而不是max-y!