请问这个直线的方程怎么求

2021-04-23 09:30:56 +08:00
 ly90907

如图所示,我有 n 个离散的点,一根直线从上方掉落,直到落到“最高”的两个点,(其实不一定是最高,就是这根直线无法再下落,重力势能最小了),然后根据这两个点求得直线方程。

想问下各位大帅逼 /大漂亮用什么算法,或者这个算法的关键词我自己搜索也行,十分感谢。

3096 次点击
所在节点    问与答
51 条回复
HaydenYe
2021-04-23 09:34:02 +08:00
先找最高点 然后绕最高点旋转? 第一次相交情况就是吧(顺逆时针都可以 然后取低值)
Raven316
2021-04-23 09:35:10 +08:00
所以图呢。。
qqq8724
2021-04-23 09:38:14 +08:00
@Raven316 要魔法上网
marcong95
2021-04-23 09:40:22 +08:00
找出来两个极值连一条线?

不过这个重力势能是不是有点难定义,例如我在两点直接直接戳一条平行于 y 轴的直线,那算不算?
inertia
2021-04-23 09:41:38 +08:00
@HaydenYe 不一定会在最高点上,比如你可以随便找个带阻尼的正弦函数试试
codehz
2021-04-23 09:41:49 +08:00
这样描述的话,听起来会有很多边界问题,怎么判定最高,举个例子
4 个数据点
2 4 1 2
是选择 1 2 点连线还是 2 4 点呢
lance6716
2021-04-23 09:42:19 +08:00
凸包
ly90907
2021-04-23 09:43:16 +08:00
@Raven316 啊,看不到吗?我还专门预览过 https://imgur.com/ntO2HZS

@HaydenYe 我想过,假设右边有两个挨着的同样值的最高点,用你说的旋转只会是这两个点通过的直线,但是我需要的是橘色的线![]( )
inertia
2021-04-23 09:45:27 +08:00
这条线可以这么定义,在点集中取两个点,将其连成一条直线,点集中的除这两个点外的所有点都在直线之下
Stoulla
2021-04-23 09:45:51 +08:00
7 楼应该是正解,这玩意儿就是找一个凸包
ly90907
2021-04-23 09:45:53 +08:00
@codehz 就是类似于不平整的地面上放一根直尺,我想测量离尺最远的地面的距离,当然如果地面是突起的,那我觉得应该就是地面中心做切线吧
ly90907
2021-04-23 09:47:23 +08:00
@inertia 对对对,我就是这个意思,我语文能力太捉急了
ynyounuo
2021-04-23 09:48:12 +08:00
我觉得如果直线是无限长度的,那么落点必然是两个 local maxima,用 scipy 的 find_peaks 找两个最高点,两点求方程就不用说了吧
Mithril
2021-04-23 09:49:24 +08:00
你这个本质上是在计算凸包的一条边。先把凸包算出来就好了。
ryd994
2021-04-23 09:50:33 +08:00
这个解可能不唯一啊
如果是 1 2 1
那么有两个解
如果是 1 2 2 1
那么可以有三个解
sujin190
2021-04-23 09:53:13 +08:00
搞不懂这个的问题难点在哪,楼主既然已经画了二维平面,那么直线下落到最高的必然是所有数据中两个最大值上啊,没有其他情况了吧,两个点确定一个方程组这种小学应用题还用来问啊
Vinty
2021-04-23 09:53:50 +08:00
遍历一遍局部峰值点,找全局最高点,然后搜索局部峰值
假设峰值点的集合为 d = {X,Y}, 最高点和其中一条峰值点的直线为 ax+b
所有的 aX+b > =Y 时,就是满足条件的解。搜索方法应该还能再改进,暂时没想到
但是,如果是这样的,会有两个解
GuuJiang
2021-04-23 09:54:18 +08:00
首先你得定义整个范围的左右边界,找出其中点 m,然后找到 y 最大的点,如果 m 在其左侧则逆时针旋转,在右侧则顺时针旋转,找到下一个碰到的点,如 m 介于两点的 x 之间,则中止,者两点就是所求,否则 m 必然位于两点同侧,那继续在哪侧就像哪侧旋转,重复直至 m 位于两点之间
Mithril
2021-04-23 09:54:19 +08:00
算凸包的时候加上两个点,( 0,0 )和( max_x, 0 ),算出来的凸包去掉那三条固定的边,然后剩下的边里面挑个斜率最接近 0 的就行了。
whileFalse
2021-04-23 09:56:03 +08:00
题目有问题,因为无法比较两条 [直线] 的重力势能。如楼上的 1,2,2,1,如何比较 1,2 和 2,2 的重力势能哪个大?

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

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

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

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

© 2021 V2EX