给定曲线,我只有曲线的 (X,Y) 坐标,我想找到这条曲线的最陡点或弧长(弧的起点和终点)
问问题
913 次
1 回答
0
如果您有一组要在其间绘制直线的点,则它是一个多边形,并且多边形的点没有斜率,因为该点一侧的线的斜率通常与该点另一侧的线的斜率。您可以获得点之间的斜率,这就是下面的代码所做的。(这是 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);
如果您使用直线以外的其他东西来连接点,例如样条曲线,那么这些点确实具有曲率并且数学更加复杂。
于 2019-02-07T10:36:38.907 回答