Как я могу найти самую крутую точку кривой или дугу кривизны? - PullRequest
0 голосов
/ 06 февраля 2019

Учитывая, что у меня только есть координаты (X, Y) кривой, я хочу найти самую крутую точку этой кривой или длину дуги (начальную и конечную точку дуги)

1 Ответ

0 голосов
/ 07 февраля 2019

Если у вас есть набор точек, между которыми вы рисуете прямые линии, это многоугольник, а точки многоугольника не имеют наклона, поскольку наклон линии на одной стороне точки обычно не равентакой же, как наклон линии на другой стороне точки.Вы можете получить наклон между точками, что и делает код ниже.(Это javascript, поскольку вы не указали язык)

var pointsArray = [[0,0],[5,13],[10,19],[15,14],[20,-3]];

function findSlopes(points) {
    var result = [];
    for (i = 0; i < points.length - 1; i++) {
        var rise = points[i+1][1] - points[i][1];
        var run = points[i+1][0] - points[i][0];
        result.push(rise / run);
    }
    return result;
}

var slopesArray = findSlopes(pointsArray);

console.log("slopes " + slopesArray);

Чтобы найти самый крутой склон, выполните шаг по массиву склонов, чтобы найти самое высокое абсолютное значение.

function steepestSlope(slopes) {
    var steepestValue = 0;
    var steepestIndex = -1;
    for (var i = 0; i < slopes.length; i++) {
        if (Math.abs(slopes[i]) > Math.abs(steepestValue)) {
            steepestValue = slopes[i];
            steepestIndex = i;
        }
    }
    return steepestIndex;
}

var steepest = steepestSlope(slopesArray);

console.log("steepest " + steepest);

Приведенный ниже код определяет общую длину многоугольника, представленного точками.

function findLength(points) {
    var result = 0;
    for (i = 0; i < points.length - 1; i++) {
        var dx = points[i+1][0] - points[i][0];
        var dy = points[i+1][1] - points[i][1];
        result += Math.sqrt(dx * dx + dy * dy);
    }
    return result;
}
var length = findLength(pointsArray);

console.log("length " + length);

Если для соединения точек используется что-то отличное от прямых линий, например сплайновая кривая, то точки имеют кривизну иматематика сложнее.

...