【问题标题】:Find the first point where a line touches a convex hull找到一条线接触凸包的第一个点
【发布时间】:2021-08-22 07:10:47
【问题描述】:

首先,我使用convexHull Matlab 函数为给定点绘制了一个凸包:

x = [4*rand(10,1)-2];
y = [rand(10,1)+5];
DT = delaunayTriangulation(x,y);
C = convexHull(DT);
plot(DT.Points(:,1),DT.Points(:,2),'.','MarkerSize',10)
hold on
plot(DT.Points(C,1),DT.Points(C,2),'r')

这个凸包只是一个例子,它可以是任何其他的凸包。我们假设凸包在抛物线y=x^2内。

然后我想在凸包上找到接触线y=[(a^2+1)/a]x-1 的第一个点,当我们从a=1 开始时,如果从未接触过凸包(当凸包在LHS 上时),它可以一直到a=+\infty

如何实现?我的最终目标是在图中找到a

【问题讨论】:

    标签: matlab line convex-hull


    【解决方案1】:

    对于多边形的每个角(x_i, y_i) 求解a_i 的二次方程。

    y_i*a_i = (a_i^2 + 1)*x_i - 1

    将点坐标代入线方程即可得到方程。接下来,丢弃与您无关的解决方案 (a<1)。完成后,按a 对解决方案进行排序。如果您还需要相应顶点的索引,Matlab 中的sort 函数为您提供索引数组作为附加输出。然后你就可以画线了。

    作为极端情况,线可能会碰到两个顶点。如果您只需要a,这不是问题。如果你想要顶点 id,随意丢弃一个,或者使用一些额外的规则。

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 2020-04-27
      相关资源
      最近更新 更多