在javascript / svg / d3中的Rotate函数中获取变量值时遇到问题

时间:2018-10-01 19:18:44

标签: javascript d3.js svg

<script>
    for(i = 0;i < 12;i++) {
        svg.append("polygon")
           .attr("points", "0,0.9511, 1.0,0.95111, 1.309,0,  1.618,0.9511, 2.618,0.9511, 1.809,1.5388, 2.118,2.4899, 1.309,1.9021, 0.5,2.4899, 0.809,1.5388")
           .attr("transform", "translate(850, 350), scale(8),rotate(30*i, 800,350)")
           .style("fill", "yellow");
    }
</script>

这是我的恒星代码。我必须设计12个约800,350颗恒星,半径约50颗恒星。 问题是30 * i被解释为30 * i,而不是乘法 0,30,60,90 ....度。 这真的很奇怪,因为我过去可以访问值,而无需在rect转换中进行计算。

请不要告诉我使用来计算x,y的值 x = a + rcos theta。我想以更优雅的方式做 另外请很好,我是这种语言的新手。

1 个答案:

答案 0 :(得分:0)

您的变量'i'被呈现为字符串'i',而不是度值。 尝试将您的代码更改为类似于以下代码的代码,看看是否可以解决您的问题:

for(i=0;i<12;i++)
{

svg.append("polygon").attr("points", "0,0.9511, 1.0,0.95111, 1.309,0,  1.618,0.9511, 2.618,0.9511, 1.809,1.5388, 2.118,2.4899, 1.309,1.9021, 0.5,2.4899, 0.809,1.5388")
.attr("transform", `translate(850, 350), scale(8),rotate(30*${i}, 800,350)`)
.style("fill", "yellow");
}

我已将属性字符串值“ translate(850,350),scale(8),rotate(30 * i,800,350)”更改为使用模板字符串使用'i'的实际值:{{1 }}