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

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

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

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

3116 次点击
所在节点    问与答
51 条回复
lidlesseye11
2021-04-23 17:20:52 +08:00
感觉楼主想要的是个类似于豪斯多夫距离的概念?
满足 9L 描述的有不止一条直线,定义 Di 为点 i 到直线的距离的话,楼主想要的是使 max ( Di )最小的那条线?
shyrock
2021-04-23 17:22:48 +08:00
1.下落到最高点,如果最高点多于 2 个,则解是连接这两个点的直线。
2.如果最高点只有一个,则判断最高点在左侧还是右侧,然后以最高点为原点,对侧的点按极坐标排序,第一个扫到的点和最高点确定直线
lidlesseye11
2021-04-23 17:23:13 +08:00
@lidlesseye11 又或者是使 sum ( Di )最小的那条线?
akira
2021-04-23 19:45:39 +08:00
找到最高点
以最高点为原点建立极坐标
扫描两侧的点
所以应该是有 2 个解...
rus4db
2021-04-23 20:00:37 +08:00
关键词:凸包算法
wa007
2021-04-24 08:41:00 +08:00
找到最高点,最高点肯定经过这条直线,然后遍及其他点,与最高点连成一条直线,斜率绝对值最小的直线就是答案
LxExExl
2021-04-24 13:59:55 +08:00
楼主如果是炒股我觉得技术分析啥的都没用

各种均线看看就行了 还是选成长股优质股然后长线定投
oylinv
2021-04-24 16:37:12 +08:00
这个的话,最简单的方法,就是按顺序取两个点,用这两条点建立直线,再判断其他点是否在这条线下方(点到直线距离公式去掉绝对值), 如果存在上方的点,则顺序换接下来的两个点计算。
就是计算次数比较多
ly90907
2021-04-25 16:35:12 +08:00
感谢各位的回复和解答,由于人数较多就不一一回复了,看了各位的回答,并且思考 @GuuJiang 和 @Jirajine 这两位朋友的回复就是我想要的答案。并且整理了一下,写了一个总结。https://zhuanlan.zhihu.com/p/367706616
懒得点的话我就直接把伪代码贴上,以供分享。


遍历点集找出最高点 P1 ;

if P1∈[0,N ) 遍历 P1 右边的点,计算斜率 k,找出 k 最大的点 P2 ;

if P2∈[N,2N ) 得到 P1,P2 为最终结果

else P1 = P2, 递归上述过程

else if P1∈[N,2N ) 遍历 P1 左边的点,计算斜率 k,找出 k 最小的点 P2 ;

if P2∈[0,N ) 得到 P1,P2 为最终结果

else P1 = P2, 递归上述过程



@sujin190
@ryd994
@Vinty
@whileFalse
@zxCoder
@stonewolfcjq
@aneureka
@ho121
@3dwelcome
@oamu
@shyrock
@wa007
@LxExExl
@oylinv
ryd994
2021-04-25 17:21:07 +08:00
既然反正是 O(n^2)
那直接遍历经过每每两点的直线,使得直线在 1/2 处的值最大化即可
这样做虽然计算量大一点,但是可以很容易并行化
ly90907
2021-04-25 17:26:56 +08:00
@ryd994 我在八楼回复的图,绿线在 1/2 处比黄线的要大,但是黄线才是要得到的。不知道我的理解对不对

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

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

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

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

© 2021 V2EX