【问题标题】:Get the upper bound of convex hull as a function in MATLAB?获取凸包的上限作为MATLAB中的函数?
【发布时间】:2016-05-25 06:43:35
【问题描述】:

上图显示了以下函数的绘图:

  • 红色凸包
  • 蓝色边界和
  • 分散为紫色点。

我想创建一个函数,假设 convehull 作为数学函数,它将为每个“x”返回“y”。

由于每个 x 对应 2 个点,因此必须取 y 值较高的点。

【问题讨论】:

  • 评估每个x对应的y并取最大值
  • @Daniel 不,我没有。我找到了matlab的函数convexHull。它返回了我加入的点的索引号,以获得如图所示的凸包。
  • 也尝试接下来的步骤 2) 确定最左边和最右边的点。使用它们将凸包拆分为上部和下部。上半部分是包含最大 y 值的部分。 3) 使用带线性插值的 interp2 来获得任意 x 值的 y 值。试一试,当您不知道如何继续时,将到目前为止的代码放入您的问题并解释您的问题。

标签: matlab function convex-hull


【解决方案1】:

计算 x 的 y 的一种方法是在凸包边缘上运行一个循环。如果位于 x 处的垂直线与边缘相交,则求交点的 y 坐标。最后,输出此类 y 值的最大值。一些带有 cmets 的代码:

vx = [3 7 4 8 5 9 2 6 5 3];   % test data
vy = [2 4 1 3 2 5 2 6 5 4];   % test data
cvx = convhull(vx, vy);
X = vx(cvx); Y = vy(cvx);     % boundary of convex hull

x = 4.2;                      % test point
y = min(vy);                  % y starts at minimal value of all y-coords
for (i=1:numel(cvx)-1)
    if sign(X(i)-x) ~= sign(X(i+1)-x)     % if x is between X(i) and X(i+1)
        yc = Y(i+1)*(X(i)-x)/(X(i)-X(i+1)) + Y(i)*(x-X(i+1))/(X(i)-X(i+1));  
        y = max(y, yc);       % compare to linear interpolant yc, take larger
    end
end

hold on
plot(vx, vy, 'o')            
plot(X, Y)
plot(x, y, 'r*')
hold off

输出:

【讨论】:

    猜你喜欢
    • 2012-10-26
    • 2012-08-04
    • 2018-07-28
    • 1970-01-01
    • 2016-01-02
    • 2016-01-11
    • 2013-03-24
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多