【问题标题】:Finding highest point in a a curve generated following two rect lines在两条矩形线之后生成的曲线中查找最高点
【发布时间】:2020-12-01 04:55:41
【问题描述】:

我正在使用 JSXGraph 绘制两条矩形线,在交叉点我需要创建一条沿着两条线并将 B 点与 C 点连接起来的曲线,然后我需要找到该曲线的最高点。有什么方法可以使用吗?

【问题讨论】:

  • 连接 B 点和 C 点的曲线可以有无数条。您将如何决定需要哪条曲线?

标签: javascript math graph jsxgraph


【解决方案1】:

如评论中所述,所述问题没有唯一的解决方案。一种可能性是选择许多样条曲线之一。我会提出一个使用高中数学的非常简单的方法:取一个三阶多项式 f,它穿过点 BC 并且其导数在 B 处等于线​​ AB 的斜率,并且其在 C 处的导数等于线 CD 的斜率。

为方便起见,我们假设 B 的 x 坐标为 0,C 的 x 坐标为 1。此外,我们用 表示线 AB 的斜率>s1CD 线与 s2 的斜率。对于一般的解决方案,我们必须稍后将 s1s2 乘以 C_x - B_x

现在,我们要计算多项式的参数a,b,c,d

f(x) = ax^3 + bx^2 + cx + d.

这可以通过注意来完成

  • f(0) = B_y
  • (f(1) = a + b + c + d
  • f'(0) = c = s_1
  • f'(1) = 3a + 2b + c = s_1,

请参阅下面代码中的函数f。当我们知道多项式f时, f的最大值可以很容易地通过计算导数的根来确定

f'(x) = 3ax^2 + 2bx + c

代码如下:

var A, B, C, D, l1, l2, f, g, maximum, curve, E;

A = board.create('point', [-4,-2]);
B = board.create('point', [-2,2]);
C = board.create('point', [1, 2]);
D = board.create('point', [3, 0]);

l1 = board.create('line', [A, B]);
l2 = board.create('line', [C, D]);

f = function(x) {
  var dx = C.X() - B.X(),
    s1 = l1.getSlope() * dx,
    s2 = l2.getSlope() * dx,
    a, b, c, d;

  d = B.Y();
  c = s1;
  a = s2 - s1 - 2 * (C.Y() - c - d);
  b = C.Y() - c - d - a;
  return a * x * x * x + b * x * x + c * x + d;
};

g = function(x) {
  return f((x - B.X()) / (C.X() - B.X()));
};

maximum = function() {
  var dx = C.X() - B.X(),
    s1 = l1.getSlope() * dx,
    s2 = l2.getSlope() * dx,
    a, b, c, d, x1, x2, x, dis;
  d = B.Y();
  c = s1;
  a = s2 - s1 - 2 * (C.Y() - c - d);
  b = C.Y() - c - d - a;

  dis = 4 * b * b - 12 * a * c;
  x1 = (-2 * b + Math.sqrt(dis)) / (6 * a);
  x2 = (-2 * b - Math.sqrt(dis)) / (6 * a);
  if (6 * a * x1 + 2 * b < 0) {
    x = x1;
  } else {
    x = x2;
  }
  x = x * (C.X() -  B.X()) + B.X();
  return [x, g(x)];
};

curve = board.create('functiongraph', [g], {strokeCOlor: 'red', strokeWidth: 3});
E = board.create('point', [maximum]);

https://jsfiddle.net/bv5mgy7k/8/观看直播

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多