на основе решения D3 @ Duopixel, я написал следующую функцию для собственного использования, в чистом JavaScript с использованием DOM API:
function findY(path, x) {
var pathLength = path.getTotalLength()
var start = 0
var end = pathLength
var target = (start + end)/2
// Ensure that x is within the range of the path
x = Math.max(x, path.getPointAtLength(0).x)
x = Math.min(x, path.getPointAtLength(pathLength).x)
// Walk along the path using binary search
// to locate the point with the supplied x value
while (target >= start && target <= pathLength) {
var pos = path.getPointAtLength(target)
// use a threshold instead of strict equality
// to handle javascript floating point precision
if (Math.abs(pos.x - x) < 0.001) {
return pos.y
} else if (pos.x > x) {
end = target
} else {
start = target
}
target = (start + end)/2
}
}
Я сделал это в D3, но это должно быть легко переданы Рафаэль: HTTP : //bl.ocks.org/duopixel/3824661 – Duopixel
Спасибо, очень полезно. – Hippocrates
@Duopixel Это на самом деле ответ. Вы должны отправить его в качестве ответа. – hlfcoding