【发布时间】:2016-11-15 01:39:33
【问题描述】:
我正在制作像 seat.io 这样的软件,我正在尝试弯曲圆圈的线。我首先使用 d3.js 创建一个带有 svg 圆圈的正方形。
y 坐标
我首先找到了中间的圆,并将它的 cy 设置为 0,然后依次设置后续的圆(每行递增 12。然后我意识到,如果它是偶数,它就找不到中间点。
我决定使用 bhaskara 公式来查找曲线坐标,但我不知道如何在循环内定位它:
$("#curve").on("change",function(){
var a = $(this).val();
var q = quant_col2;
console.log(q);
console.log(quant_line2);
var half = Math.round(quant_col2/2) - 1;
console.log("media: " + half);
var value = 0;
var circles = svg.selectAll("circle").attr("cy", function(d, i){
var cy = $(this).attr("cy");
var resultado = baskara(quant_col2,quant_line2,0);
var xv = -Math.abs(quant_line2)/(2 * quant_col2);
var xy = -Math.abs(delta(quant_col2,quant_line2,0))/4 * quant_col2;
if(i < q){
if(i == half) {
return value;
}
}
if(i == q - 1){
half = half + quant_col2;
q = q + quant_col2;
value = value + 12;
return cy;
}
return cy;
});
console.log($(this).val());
});
如何使它弯曲并正确定位圆圈? 感谢您的帮助。
编辑 1: 没有数据参数的代码
var curva = svg.selectAll("circle")
.attr("cx", function(d,i) {
var cx = $(this).attr("cx");
return p_parab.x(cx);
})
.attr("cy", function(d,i) {
var cy = $(this).attr("cy");
return p_parab.y(cy) + 15* cy;
});
【问题讨论】:
-
我已经阅读了您的问题 3 次,但不知道您在问什么。你能创建一些可运行的代码来说明你的问题吗?
-
嗨@Mark,谢谢!我在这里创建了一个 Fiddle jsfiddle.net/jaquedeveloper/zvb4uL91 单击 Draw 和 Rows,您将能够看到它现在是如何工作的以及公式
-
@Mark,我一直在使用您提供的解决方案,对此我有疑问。你知道我怎样才能得到一个对称的结果。我需要第一个和最后一个圆圈处于同一水平(y 轴)。您评论中提供的解决方案是迄今为止最好的解决方案,我非常感谢您的帮助。这是我需要做的最后一件事。我一直在努力,但仍然无法获得这种对称性。这是唯一剩下的东西。
-
嗨@Mark,我想了解这个等式,我可以调整它以完美运行 30 圈线。但是如果圈数小于它,例如,10,它就不能正常工作。我已经对数字进行了一些调整,但我想使其自动化,以便无论每行有多少个圆圈都能正常工作......我该怎么做?这是小提琴:jsfiddle.net/jaquedeveloper/fpzqf2xr 要调整圈数,请更改 quant_col2 变量。
-
@steve-ladavich 你能帮我解决这个问题吗?
标签: javascript math d3.js svg logic