Javascript 不同高度和宽度的正多边形

Javascript 不同高度和宽度的正多边形,javascript,kineticjs,Javascript,Kineticjs,我想用Kinetic.js创建一个多边形,我知道多边形的宽度、高度、旋转和点数 我认为这可以通过使用RegularPolygon对象来实现,但为此,我必须为radius设置一个值。将创建一个三角形,如下所示: var hexagon = new Kinetic.RegularPolygon({ x: stage.width()/2, y: stage.height()/2, sides: 3, radius: 70, fill: 'red', }); 请

我想用Kinetic.js创建一个多边形,我知道多边形的宽度高度旋转点数

我认为这可以通过使用RegularPolygon对象来实现,但为此,我必须为radius设置一个值。将创建一个三角形,如下所示:

var hexagon = new Kinetic.RegularPolygon({
    x: stage.width()/2,
    y: stage.height()/2,
    sides: 3,
    radius: 70,
    fill: 'red',
});
请参见此处创建的类似多边形:

结果如下所示:

var hexagon = new Kinetic.RegularPolygon({
    x: stage.width()/2,
    y: stage.height()/2,
    sides: 3,
    radius: 70,
    fill: 'red',
});

但是如果我想创建一个宽度应该是高度两倍的三角形呢?看起来像这样:

var hexagon = new Kinetic.RegularPolygon({
    x: stage.width()/2,
    y: stage.height()/2,
    sides: 3,
    radius: 70,
    fill: 'red',
});

据我所知,仅仅通过调整半径是不可能的


对于任何多边形,如何实现这一点?请注意,我不知道要开始的点的值(尽管可以计算)。我认为scaleX和scaleY是可以使用的,但是有可能以更简单的方式实现吗?我只想直接设置宽度和高度。

KineticJS多边形是正多边形(所有边的长度相等)

如果要对多边形进行笔划,则缩放正多边形会很麻烦,因为笔划也会被缩放,因此笔划会变形

所以你最好的解决办法可能是画一条多边形线,形成三角形

下面是示例代码和演示:

var阶段=新的动力学阶段({
容器:'容器',
宽度:350,
身高:350
});
var layer=新的动能层();
阶段。添加(层);
var-PI=Math.PI;
var PI2=PI*2;
缩放规则多边形(100100,30,5,2,1,'red');
函数scaledRegularPolygon(cx、cy、半径、边、scaleX、scaleY、fill){
var点=[];

for(var i=0;i
Kinetic.Transform
允许我们通过将点传递到
Kinetic.Transform.point()
来计算变换矩阵中点的位置。从要变换点的对象,使用
Kinetic.Node.getAbsoluteTransform().copy()获取其变换矩阵(或
Kinetic.Node.getTransform().copy()
,任何适合您的目的的东西)。然后我们在变换矩阵上调用
Kinetic.Transform.scale(2,2)
,得到一个具有两倍比例的矩阵。然后对于每个点,使用
Kinetic.Transform.point()
获得其新位置。

KineticJS多边形是规则多边形(所有边的长度相等)。缩放正三角形很麻烦,因此您最好的解决方案可能是只绘制一条形成三角形的多边形线。您有一个例子说明我如何做到这一点吗?如何在知道区域的宽度、高度、旋转以及点数的情况下计算点?感谢您的回答,非常感谢!但是,这并不能真正解决问题这就是一切,因为它只适用于三角形,而不适用于任何点数的多边形。我不确定是否将答案标记为已接受。我应该能够使用该方法继续前进,只是还没有开始。我明白了,所以你需要一个通用的规则多边形缩放算法。我编辑了may answer,以展示如何使用trigonomet实现这一点ry.祝你的项目好运!谢谢!在这种情况下,半径是内半径还是外半径?而且,它仍然不能真正解决我的问题。正如我所说,我没有半径、scaleX和scaleY,所以我需要在调用函数之前计算它们。我试着根据宽度和高度计算半径(多边形矩形边框的宽度和高度),但我并没有做到完美。我也不知道如何计算scaleX和scaleY。