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

2019-09-30 17:02:22 +08:00
 hustfox

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

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

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

如果不可导,那就和楼上一样,给 y 定个区间,多开几个线程遍历最小喽
ruxuan1306
2019-09-30 19:38:11 +08:00
哎不对 L 对 y 求导时 x 是常数
直接令 L'(y)=0
解得 y=(Σ[c(x)-m(x)])/n
我猜令 L 最小的 y 应该就是这个
Xs0ul
2019-09-30 22:39:50 +08:00
得讲清楚,ab 能怎么移?上下左右平移?还是也可以旋转?
aguesuka
2019-10-01 07:45:02 +08:00
假设已知所有曲线方程并可积,假设,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
2019-10-01 08:53:06 +08:00
@ruxuan1306 你这个算法应该不对的,举特殊点的例子,设 C 曲线为单位阶跃函数(定义 x=0 时 y=1/2 ),A B 为距离小于 1 的常数函数,你求的中线 m 与 C 方差最小的距离应是 y=1/2,但这个时候 C 曲线只有 x=0 处算在 A B 之间,但是显然当曲线 m 与 0 或 1 重合时才是最优解。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/605729

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX