gpt4 book ai didi

javascript - 如何绘制闭合曲线?

转载 作者:行者123 更新时间:2023-12-05 03:17:06 25 4
gpt4 key购买 nike

enter image description here红框区域是让我很烦的部分,那是路径的起点和终点,但是没有曲线效果

我的代码很简单:

const svg = d3.select("svg");
let data = [[1, 3], [2, 4], [3, 4], [5, 6], [6, 5], [7, 3], [6, 1], [4, 2], [2, 2], [1, 3]]
let datax = data.map(v => v[0])
let datay = data.map(v => v[1])

let scale_x = d3.scaleLinear()
.domain([d3.min(datax), d3.max(datax)])
.range([0, 960])
let scale_y = d3.scaleLinear()
.domain([d3.min(datay), d3.max(datay)])
.range([500, 0])

let curve_generator = d3.line()
.x((d) => scale_x(d[0]))
.y((d) => scale_y(d[1]))
.curve(d3.curveBasis)

svg.append('path')
.attr('d', curve_generator(data))
.attr('stroke', 'gray')
.attr('stroke-width', 2)
.attr('fill', 'none')

最佳答案

在我看来,在您的数据中,最后一点与第一个点位于同一位置,只是为了“关闭”路径。如果是这种情况,只需删除最后一点并使用 d3.curveBasisClosed,这样 D3 将为您关闭路径:

const svg = d3.select("svg");
let data = [
[1, 3],
[2, 4],
[3, 4],
[5, 6],
[6, 5],
[7, 3],
[6, 1],
[4, 2],
[2, 2]
]
let datax = data.map(v => v[0])
let datay = data.map(v => v[1])

let scale_x = d3.scaleLinear()
.domain([d3.min(datax), d3.max(datax)])
.range([0, 300])
let scale_y = d3.scaleLinear()
.domain([d3.min(datay), d3.max(datay)])
.range([150, 0])

let curve_generator = d3.line()
.x((d) => scale_x(d[0]))
.y((d) => scale_y(d[1]))
.curve(d3.curveBasisClosed)

svg.append('path')
.attr('d', curve_generator(data))
.attr('stroke', 'gray')
.attr('stroke-width', 2)
.attr('fill', 'none')
<script src="https://d3js.org/d3.v7.min.js"></script>
<svg></svg>

关于javascript - 如何绘制闭合曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74341609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com