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
Javascript Raphael.js透视变换_Javascript_Svg_Raphael - Fatal编程技术网

Javascript Raphael.js透视变换

Javascript Raphael.js透视变换,javascript,svg,raphael,Javascript,Svg,Raphael,我正在使用Raphael.js,在创建透视变换时遇到了一个问题。它应该是svg/raphael解决方案,因为这是创建图像的一个步骤。下面是它现在的样子: 目标是使用变换在z轴上使其倾斜。它应该看起来像这样的图像: 代码: 编辑: 有什么解决办法吗 我不知道这里的答案是否是歪斜。问题是,您试图在纸张上应用3d效果,而不是2d效果。 我不确定这也可以用纯svg和raphael实现,但这里有一个使用css3 3d转换(rotateX)和透视的纯css解决方案: body { /* th

我正在使用Raphael.js,在创建透视变换时遇到了一个问题。它应该是svg/raphael解决方案,因为这是创建图像的一个步骤。下面是它现在的样子:

目标是使用变换在z轴上使其倾斜。它应该看起来像这样的图像:


代码:


编辑:


有什么解决办法吗

我不知道这里的答案是否是歪斜。问题是,您试图在纸张上应用3d效果,而不是2d效果。
我不确定这也可以用纯svg和raphael实现,但这里有一个使用css3 3d转换(rotateX)和透视的纯css解决方案:

body {
    /* the lower the value, the higher the distortion */
    perspective: 600px;
}

#raph-rotate {
    width: 500px;
    height: 750px;
    margin: 0 auto;
    transform: rotateX(30deg);
    transform-origin: 50% 100%;
}

这是最新的提琴:

我认为这在拉斐尔是不可能的。一个简单的问题:你为什么不直接画出你想要的形状呢?我的意思是,这不是一个很难画的形状

话虽如此,我认为你应该画不同的画。我会这样做(我重复了您在“代码”部分中提供给我们的路径):


通过这种方式,您可以修改集合中游戏场的每个元素,而无需多次重写“.attr({stuff…})”。

您可以在JSFIDLE上获得一个测试示例。我已经更新了问题:)是的,您是对的。这是一个透视变换,而不是倾斜。我会更新我的帖子。您的解决方案工作正常,但我需要一个raphael/svg解决方案,因为转换是创建图像的中间步骤:)raphael和svg是2D技术,它们都不会直接进行您想要的转换上面是由一个将svg文件转换为raphael代码的工具生成的:)目前我只想尝试一些效果。稍后我会把它放在非常好看的OOP样式中:)我明白了:)尽管如此,我可能遗漏了一些东西,但是为什么不尝试直接用你想要的形状来绘制它呢?我认为这很简单。我想创建一个用户可以动态更改的图像。颜色、不透明度和透视应该是选项。如果在拉斐尔无法实现你想要的效果,你可以绘制多个版本的运动场。这样可以限制用户对透视值的选择。你知道,在你想要的轴上,每10°就有10°,类似的。但这是一项很长的工作。
body {
    /* the lower the value, the higher the distortion */
    perspective: 600px;
}

#raph-rotate {
    width: 500px;
    height: 750px;
    margin: 0 auto;
    transform: rotateX(30deg);
    transform-origin: 50% 100%;
}
var path;
var set = paper.set();
function obj(chosenPath,color){
                switch(color){

                    case 1:
                    path = paper.path(chosenPath).attr({
                        fill:field_color1,
                        stroke : "none",
                        "fill-opacity":opacity
                    });
                    break;

                    case 2:
                    path = paper.path(chosenPath).attr({
                        fill:field_color2,
                        stroke : "none",
                        "fill-opacity":opacity
                    });
                    break;

                    case 3:
                    path = paper.path(chosenPath).attr({
                        fill:line_color,
                        stroke : "none",
                    });
                    break;

                    default:
                    return hue;
                }

                set.push(path);

            }

obj('M 2500 3750 L 2500 3481.9 L 0 3481.9 L 0 3750 L 2500 3750Z',1);
obj('M 2500 3482.2 L 2500 3214.1 L 0 3214.1 L 0 3482.2 L 2500 3482.2Z',2);
obj('M 2500 3214.3 L 2500 2946.2 L 0 2946.2 L 0 3214.3 L 2500 3214.3Z',1);
obj('M 2500 2946.5 L 2500 2678.4 L 0 2678.4 L 0 2946.5 L 2500 2946.5Z',2);
obj('M 2500 2678.6 L 2500 2410.6 L 0 2410.6 L 0 2678.6 L 2500 2678.6Z',1)
obj('M 2500 2410.8 L 2500 2142.7 L 0 2142.7 L 0 2410.8 L 2500 2410.8Z',2)
obj('M 2500 2142.9 L 2500 1874.9 L 0 1874.9 L 0 2142.9 L 2500 2142.9Z',1);
obj('M 2500 1875.1 L 2500 1607 L 0 1607 L 0 1875.1 L 2500 1875.1Z',2);
obj('M 2500 1607.3 L 2500 1339.2 L 0 1339.2 L 0 1607.3 L 2500 1607.3Z',1);
obj('M 2500 1339.4 L 2500 1071.3 L 0 1071.3 L 0 1339.4 L 2500 1339.4Z',2);
obj('M 2500 1071.6 L 2500 803.5 L 0 803.5 L 0 1071.6 L 2500 1071.6Z',1);
obj('M 2500 803.8 L 2500 535.7 L 0 535.7 L 0 803.8 L 2500 803.8Z',2);
obj('M 2500 535.9 L 2500 267.8 L 0 267.8 L 0 535.9 L 2500 535.9Z',1);
obj('M 2500 268 L 2500 0 L 0 0 L 0 268 L 2500 268Z',2);
obj('M 1237.1 597.3 C 1237.1 604.4 1242.9 610.2 1250 610.2 C 1257.1 610.2 1262.9 604.4 1262.9 597.3 C 1262.9 590.1 1257.1 584.4 1250 584.4 C 1242.9 584.4 1237.1 590.1 1237.1 597.3',3);
obj('M 1262.9 3151.7 C 1262.9 3144.6 1257.1 3138.8 1250 3138.8 C 1242.9 3138.8 1237.1 3144.6 1237.1 3151.7 C 1237.1 3158.9 1242.9 3164.7 1250 3164.7 C 1257.1 3164.7 1262.9 3158.9 1262.9 3151.7',3)