用d3.js画一条跑道
Draw a race track with d3.js
对于小型个人游戏的需要,我必须绘制一条赛道作为SVG路径。为此,我认为使用D3.js库似乎完全符合我的需求,但我似乎找不到实现我想要做的事情的方法。我的电路采用以下形式,并为我的游戏引擎提供服务,以计算汽车的速度和行为。它只是一系列直线和曲线
"sectors": [
{
"length": 300,
"type": "line"
},
{
"length": 18,
"type": "curve",
"radius": 11,
"angle": 86,
"turn" : 'right'
},
{
"length": 100,
"type": "line"
}
]
我尝试天真地使用D3.js,并能够绘制出与电路的每个扇区相对应的几条路径:直线和圆弧。现在我想找到一种方法来连接所有这些元素,所以画出我的最后一个回路。我遵循了下一页的教程(https://www.dashingd3js.com/svg-paths-and-d3js)我可以很好地创建一条由几条线组成的路径,这些线代表我电路中的不同直线,代码如下:
var lineFunction = d3.svg.line()
.x(function(d) { return d.length; })
.y(function(d) { return 0; })
.interpolate("linear");
var lineGraph = svgContainer.append("path")
.attr("d", lineFunction(mySectors))
.attr("stroke", "blue")
.attr("stroke-width", 2)
.attr("fill", "none");
但是我如何在绘制直线和曲线之间切换呢?
提前非常感谢那些阅读本文并能为我提供答案的人
浣熊
我发现了这样的东西:
path = svg.append("path")
.datum(points);
path.attr("d", function (d) {
var lines = new Array();
for (var i = 0; i < d.length; i++) {
lines.push([d[i][0], d[i][1]]);
}
return line(lines);
})
这是一条好赛道吗?
我试过这个,但不起作用。。。知道吗?
svg.append("path")
.datum(formatSectors)
.attr("d", function (d) {
var paths = new Array();
for (var i = 0; i < d.length; i++) {
if (d[i].type === 'line') {
var lineData = [{"x": 0, "y": 0}, {"x": d[i]['distance'], "y": d[i]['distance']}]
paths.push(lineFunction(lineData));
}
if (d[i].type === 'curve') {
var curveData = {"radius": d[i].radius, "angle": d[i].angle};
var arcData = arcFunction(curveData);
paths.push(arcData);
}
}
return paths;
})
.attr("stroke", "blue")
.attr("stroke-width", 2)
.attr("fill", "none");
d3可能超出您的需要。您应该查看svg路径语法https://www.w3.org/TR/SVG/paths.html
你可以在试试https://codepen.io/anthonydugois/pen/mewdyZ
您必须将数据转换为与svg-path命令相对应的值,但这应该是非常直接的。
M 100 300 L 400 300 A 11 11 0 1 1 400 418 L 300 418
描述了你上面的三个部分,除了我编的弧形部分:)因为我没有做数学运算。
M 100 300--不画就移动到点100,300L 400 300——画一条线到400,300(长度300)11 11 0 1 400 418-使用11和11的半径x和y,不旋转,并设置扫频标志,绘制一条圆弧到点400、418
L 300 418——画一条线到300,418(长度100)
- 在地图上画一条路线
- 在d3中拖动一条线
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- 我正在创建一个聊天,但每次我发送消息时,它都不会让我再发送另一条消息,就像表格一样;不起作用
- 当我的条件为true时,显示一条弹出消息
- 如何在javascript中的if或else块中运行一条jsp语句
- 加载页面每10秒显示一条不同的消息
- 更改路线时,在react.js中得到一条非常crypric的消息
- 当用户单击保存按钮时,标签会显示一条消息
- 仅显示一条通用消息,而不是每个输入显示一条
- 在检索到最后一条记录后从 PostgreSQL 中提取记录
- 有没有一条清晰的路径,我可以实现一个在 ScalaJS + React 中广泛使用上下文的 React 组件
- 如果用户的浏览器早于以下版本,则显示一条消息:IE 10、Firefox 39、Chrome 39、Opera 8
- 子网格:限制用户仅选择一条记录
- 删除高图中的第一条和最后一条网格线
- 我的代码给了我一条错误消息:GetElementById()为null或不是对象
- 我可以用jQuery画一条线吗
- Highcharts为BoxPlot图表添加了一条Mean线
- 当最后一条消息溢出时删除它
- 用d3.js画一条跑道