乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 76|回复: 19

[编程交流] 从f建立一条平均线

[复制链接]

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 17:30:58 | 显示全部楼层 |阅读模式
我有一系列类似于直线的点-这些点来自第三方应用程序,由于其精度低,它们不在一条线上,即使它们应该在一条线上-请参阅下图。我现在正试图设计一个算法,从这些点重建一条直线。
 
 
我将感谢对此事的任何建议/解决方案。
非常感谢您的关注
回复

使用道具 举报

44

主题

542

帖子

502

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
220
发表于 2022-7-5 17:37:16 | 显示全部楼层
线性回归可能可以做到这一点,尽管它可能不容易编程。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:38:56 | 显示全部楼层
 
同意,研究最小二乘法。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 17:41:38 | 显示全部楼层
谢谢你们的建议,先生们。我将研究这些定理背后的数学,看看是否能够在AutoLISP中实现它们。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:46:48 | 显示全部楼层
因为你只有一个因变量和一个自变量,你可以使用简单的线性回归。。。
 
测试代码:
 
  1. (defun c:test ( / i l s )
  2.    (if (setq s (ssget '((0 . "POINT") (-4 . "*,*,=") (10 0.0 0.0 0.0))))
  3.        (progn
  4.            (repeat (setq i (sslength s))
  5.                (setq l (cons (cdr (assoc 10 (entget (ssname s (setq i (1- i)))))) l))
  6.            )
  7.            (_lineartrendline l)
  8.        )
  9.    )
  10.    (princ)
  11. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 17:49:30 | 显示全部楼层
李,我不得不说,那真的很了不起!非常感谢您的支持!
 
 
 
 
这是一种定义lambda函数的有趣方法;这是我第一次看到它。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:51:55 | 显示全部楼层
 
非常感谢米尔恰!
 
 
我很高兴你喜欢它,我有时会使用这个结构来实现额外的简洁;但是,请注意,严格来说,它不是lambda函数,而是defun-q表达式的文字等价物,例如:
 
  1. _$ (defun-q f ( x ) (* x x))
  2. F
  3. _$ f
  4. ((X) (* X X))
  5. _$ (setq g '(( x ) (* x x)))
  6. ((X) (* X X))
  7. _$ (equal f g)
  8. T
回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2022-7-5 17:54:20 | 显示全部楼层
李可以在弧上或圆上
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 17:58:10 | 显示全部楼层
礼炮Mircea
 
线性回归确保一系列值(例如y)和近似线之间的差值之和最小。
如果数据符合某些标准,则效果良好。
例如,围绕垂直线设置点,然后使用简单的线性回归(如李的lisp。顺便说一句,李,你的代码太棒了)。
183105k6xvrr3i06e966es.png
 
这是我的lisp,使用了另一个(令人惊讶的)域中的公式。
 
  1. (defun C:TEST ( / vxv ss i n l o d dx dy a)
  2. (defun vxv (a b) (apply '+ (mapcar '* a b)))
  3. (if
  4.    (setq ss (ssget '((0 . "POINT"))))
  5.    (progn
  6.      (repeat (setq i (sslength ss) n i)
  7.        (setq l (cons (cdr (assoc 10 (entget (ssname ss (setq i (1- i)))))) l))
  8.        )
  9.      (setq o  (mapcar '/ (apply 'mapcar (cons '+ l)) (list n n))
  10.            d  (mapcar '(lambda (a) (mapcar '- o a)) l)
  11.            dx (mapcar 'car d)
  12.            dy (mapcar 'cadr d)
  13.            a  (* 0.5 (atan (* 2 (vxv dx dy)) (- (vxv dx dx) (vxv dy dy))))
  14.            )
  15.      (entmake
  16.        (list
  17.          '(0 . "XLINE")
  18.          '(100 . "AcDbEntity")
  19.          '(100 . "AcDbXline")
  20.          '(62 . 1)
  21.          (cons 10 o)
  22.          (list 11 (cos a) (sin a) 0.0)
  23.          )
  24.        )
  25.      )
  26.    )
  27. (princ)
  28. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 18:01:36 | 显示全部楼层
Multumesc mult Stefan pentru solutie!非常感谢Stefan提出的解决方案。
 
虽然这两个例程的结果在一组分散的点上略有不同,但对于我必须处理的数据,它们都给出了极好的结果。
再次感谢各位的宝贵支持。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 04:07 , Processed in 0.410237 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表