假设有三条曲线( A,B,C ),由一系列点构成。A、B 是框线,C 是固定不动的曲线,要求移动 A、B 两条曲线,使得能够尽可能的包含曲线 C 中的点,其中要保证 A、B 的移动需要同步,即两者间的相对距离不能改变。有什么好的办法呀?
1
dlsflh 2019-09-30 17:05:28 +08:00 via Android
A,b 不动也就是框住的图形面积固定了。然后循环找最大?
|
2
xupefei 2019-09-30 17:13:11 +08:00 via iPhone
两条曲线框不住啊,得四条
|
3
xupefei 2019-09-30 17:29:49 +08:00
想了想,如果 C 是由点构成的,那这个问题好像是 max coverage problem 的变种?
|
4
jadehare 2019-09-30 17:58:23 +08:00
穷举,AB 从 C 的最高点移动到最低点,看有多少点
|
5
ruxuan1306 2019-09-30 19:13:04 +08:00 via iPhone
令 ab 中点组成曲线 m
设函数 L(y)=Σ[m(x)+y-c(x)]² 找出令函数 L(y)的最小的 y 即可😜 |
6
ruxuan1306 2019-09-30 19:21:56 +08:00 via iPhone
如果 m(x)和 c(x)可导,那最值还是很好找的
如果不可导,那就和楼上一样,给 y 定个区间,多开几个线程遍历最小喽 |
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 应该就是这个 |
8
Xs0ul 2019-09-30 22:39:50 +08:00
得讲清楚,ab 能怎么移?上下左右平移?还是也可以旋转?
|
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,如果方程可积,那就是一个求方程最大值的问题。
假设只知道所有的点,那么用线性函数分段拟合,可以转换为上面的问题 |
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 重合时才是最优解。
|