2016-02-14 35 views
1

enter image description here在MATLAB中获取凸包的上限作为函数?

上图图显示了以下功能的曲线图:

  • 凸形轮廓在红色
  • 边界在蓝色和
  • 分散紫点。

我想创建一个函数,它将为每个'x'返回'y',并假设convexHull为数学函数。

由于每个x对应有2个点,所以必须采用y值较高的点。

+0

评价都对应于每个'x'的'y'并采取最大 – Alessiox

+0

@Daniel没有我还没有。我发现了matlab的函数convexHull。它返回了我加入的点的索引号,以获得如图所示的凸体。 –

+1

尝试下一步以及2)确定最左边和最右边的点。用它们将凸包分成上半部分和下半部分。上半部分是包含最大y值的部分。 3)使用interp2与线性插值来获得任意x值的y值。尝试一下,当你不知道如何继续将你到目前为止的代码放入你的问题并解释你的问题。 – Daniel

回答

0

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

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 

输出:

convex