D3js 找到圆上最近的点
D3js find closest point on circle
我想要实现的是获取 mousemove 事件的当前坐标并将它们与圆上最近位置的坐标相匹配。我已经设法使用 for 循环使它部分工作,该循环遍历圆中的每个可能点并比较坐标以找到最近的点:
for (var i = Math.PI; i > -Math.PI; i -= 0.01) {
// coords of current point in circle:
var curX = Math.sin(i+Math.PI / 2)*radius + 200,
curY = Math.sin(i)*radius + 200;
// conditional which attempts to find the coords of the point closest to the cursor...
if (Math.abs((x - curX)) < distanceX && Math.abs((y - curY)) < distanceY ) {
distanceX = Math.abs((x - curX));
distanceY = Math.abs((y - curY));
// and then assigns the values to the newX/newY variables
newX = curX;
newY = curY;
}
}
问题是这个解决方案经常会 return 错误的坐标,我不确定为什么。
jsfiddle 看看我的意思:
无需循环,只需计算圆心与鼠标在圆上的点。
var dx = x - 200,
dy = y - 200,
dist = Math.sqrt(dx*dx + dy*dy),
newX = 200 + dx * radius / dist,
newY = 200 + dy * radius / dist;
我想要实现的是获取 mousemove 事件的当前坐标并将它们与圆上最近位置的坐标相匹配。我已经设法使用 for 循环使它部分工作,该循环遍历圆中的每个可能点并比较坐标以找到最近的点:
for (var i = Math.PI; i > -Math.PI; i -= 0.01) {
// coords of current point in circle:
var curX = Math.sin(i+Math.PI / 2)*radius + 200,
curY = Math.sin(i)*radius + 200;
// conditional which attempts to find the coords of the point closest to the cursor...
if (Math.abs((x - curX)) < distanceX && Math.abs((y - curY)) < distanceY ) {
distanceX = Math.abs((x - curX));
distanceY = Math.abs((y - curY));
// and then assigns the values to the newX/newY variables
newX = curX;
newY = curY;
}
}
问题是这个解决方案经常会 return 错误的坐标,我不确定为什么。
jsfiddle 看看我的意思:
无需循环,只需计算圆心与鼠标在圆上的点。
var dx = x - 200,
dy = y - 200,
dist = Math.sqrt(dx*dx + dy*dy),
newX = 200 + dx * radius / dist,
newY = 200 + dy * radius / dist;