V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hustfox
V2EX  ›  编程

如何用两条曲线尽可能的框住另一条曲线

  •  
  •   hustfox · 2019-09-30 17:02:22 +08:00 · 5884 次点击
    这是一个创建于 1888 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有三条曲线( A,B,C ),由一系列点构成。A、B 是框线,C 是固定不动的曲线,要求移动 A、B 两条曲线,使得能够尽可能的包含曲线 C 中的点,其中要保证 A、B 的移动需要同步,即两者间的相对距离不能改变。有什么好的办法呀?

    如图: https://i.loli.net/2019/09/30/5mSVwZG7EgNdqCK.png

    第 1 条附言  ·  2019-10-09 08:31:24 +08:00
    不好意思没有描述清楚。
    1 ) A、B 曲线包含相同数目的点,A、B、C (在 A 曲线区间)的点均有相同的横坐标,如
    A: (1,a1),(2,a2),(3,a3);
    B: (1,b1),(2,b2), (3,b3);
    C: (-1,c1),(0,c2),(1,c3),(2,c4),(3,c5),(4,c6)

    2 ) A、B 只能上下平移
    10 条回复    2019-10-01 08:53:06 +08:00
    dlsflh
        1
    dlsflh  
       2019-09-30 17:05:28 +08:00 via Android
    A,b 不动也就是框住的图形面积固定了。然后循环找最大?
    xupefei
        2
    xupefei  
       2019-09-30 17:13:11 +08:00 via iPhone
    两条曲线框不住啊,得四条
    xupefei
        3
    xupefei  
       2019-09-30 17:29:49 +08:00
    想了想,如果 C 是由点构成的,那这个问题好像是 max coverage problem 的变种?
    jadehare
        4
    jadehare  
       2019-09-30 17:58:23 +08:00
    穷举,AB 从 C 的最高点移动到最低点,看有多少点
    ruxuan1306
        5
    ruxuan1306  
       2019-09-30 19:13:04 +08:00 via iPhone
    令 ab 中点组成曲线 m
    设函数 L(y)=Σ[m(x)+y-c(x)]²
    找出令函数 L(y)的最小的 y 即可😜
    ruxuan1306
        6
    ruxuan1306  
       2019-09-30 19:21:56 +08:00 via iPhone
    如果 m(x)和 c(x)可导,那最值还是很好找的

    如果不可导,那就和楼上一样,给 y 定个区间,多开几个线程遍历最小喽
    ruxuan1306
        7
    ruxuan1306  
       2019-09-30 19:38:11 +08:00 via iPhone
    哎不对 L 对 y 求导时 x 是常数
    直接令 L'(y)=0
    解得 y=(Σ[c(x)-m(x)])/n
    我猜令 L 最小的 y 应该就是这个
    Xs0ul
        8
    Xs0ul  
       2019-09-30 22:39:50 +08:00
    得讲清楚,ab 能怎么移?上下左右平移?还是也可以旋转?
    aguesuka
        9
    aguesuka  
       2019-10-01 07:45:02 +08:00 via Android
    假设已知所有曲线方程并可积,假设,A 为 y=f(x)+d,B 为 y=f(c)+d+e,C 为 y=g(x)。"尽可能的包含曲线 C 中的点"如果说的不是距离。 包含曲线 C 中的点 =积分 h(g(x)-f(x), d,e) 。h 函数表示如果第一个参数在(d,d+e)之间,返回 1,否则返回 0。 用阶跃函数表示方程 h,如果方程可积,那就是一个求方程最大值的问题。

    假设只知道所有的点,那么用线性函数分段拟合,可以转换为上面的问题
    Hconk
        10
    Hconk  
       2019-10-01 08:53:06 +08:00 via iPhone   ❤️ 1
    @ruxuan1306 你这个算法应该不对的,举特殊点的例子,设 C 曲线为单位阶跃函数(定义 x=0 时 y=1/2 ),A B 为距离小于 1 的常数函数,你求的中线 m 与 C 方差最小的距离应是 y=1/2,但这个时候 C 曲线只有 x=0 处算在 A B 之间,但是显然当曲线 m 与 0 或 1 重合时才是最优解。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2577 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:19 · PVG 13:19 · LAX 21:19 · JFK 00:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.