明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1015|回复: 10

[提问] 求助怎么快速生成矩形的黄金分割线?

  [复制链接]
发表于 2024-12-30 22:16:49 | 显示全部楼层 |阅读模式
求助怎么快速生成矩形横向和纵向的黄金分割线?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2024-12-31 11:48:59 | 显示全部楼层
;; 实体黄金分割线


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 1 反对 0

使用道具 举报

发表于 2024-12-30 22:52:57 | 显示全部楼层
距离的(√5-1)/2
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-31 19:35:29 | 显示全部楼层
xyp1964 发表于 2024-12-31 11:48
;; 实体黄金分割线

很好→很棒!很好~很棒!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-1 23:41:15 | 显示全部楼层
xyp1964 发表于 2024-12-31 11:48
;; 实体黄金分割线

院长我找到你多年以前的代码
;;;黄金比 : hjb
(defun c:hjb ()
   (setq  pt1 (getpoint "\n起点 :")
  no6 (getreal "\n短边长 : ")
  leng     (/ (- (sqrt 5) 1) 2);黄金比长边尺寸
  pt2 (list (+ (car pt1) no6) (+ (cadr pt1) (* no6 leng)))
   )
   (command "rectang" pt1 pt2);黄金比的长方形
)
回复 支持 反对

使用道具 举报

发表于 2025-1-2 13:08:08 | 显示全部楼层
月下闲人 发表于 2025-1-1 23:41
院长我找到你多年以前的代码
;;;黄金比 : hjb
(defun c:hjb ()

  1. (defun c:tt ()
  2.   "黄金比矩形"
  3.   (setq dd (Udist 7 "" "短边长<输入或鼠标直接量取>" dd nil)
  4.         sc (/ (- (sqrt 5) 1) 2.) ;黄金比
  5.   )
  6.   (while (setq p1 (getpoint "\n起点<退出>: "))
  7.     (setq p2 (list (+ (car p1) dd) (+ (cadr p1) (* dd sc)))
  8.           s1  (command "rectang" "non" p1 "non" p2)
  9.     )
  10.   )
  11.   (princ)
  12. )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-2 20:46:56 | 显示全部楼层

再次感谢  很好用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-8 11:35:41 | 显示全部楼层
本帖最后由 月下闲人 于 2025-3-8 11:36 编辑
xyp1964 发表于 2024-12-31 11:48
;; 实体黄金分割线

院长好  麻烦帮我看看哪里不对  谢谢了

(defun c:HJJ (/ *acad* *doc* ss i ent obj result minPt maxPt width height hSplitY vSplitX)
  (vl-load-com)
  (setq *acad* (vlax-get-acad-object))
  (setq *doc* (vla-get-activedocument *acad*))

  ;; 创建或获取黄金分割线图层
  (if (not (tblsearch "LAYER" "HJX-黄金线"))
    (vla-add (vla-get-layers *doc*) "HJX-黄金线")
  )
  (vla-put-color (vla-item (vla-get-layers *doc*) "HJX-黄金线") 1)
  (vla-put-linetype (vla-item (vla-get-layers *doc*) "HJX-黄金线") "Continuous")

  ;; 用户交互
  (prompt "\n请选择对象: ")
  (if (setq ss (ssget '((0 . "CIRCLE,ELLIPSE,LWPOLYLINE,POLYLINE,SPLINE,INSERT,HATCH"))))
    (progn
      (repeat (setq i (sslength ss))
        (setq ent (ssname ss (setq i (1- i)))
              obj (vlax-ename->vla-object ent))
        ;; 安全获取边界框
        (setq result (vl-catch-all-apply 'vla-getboundingbox (list obj 'minPt 'maxPt)))
        (if (vl-catch-all-error-p result))
          (princ "\n错误: 无法获取对象的边界框。")
          (progn
            ;; 转换坐标数据
            (setq minPt (vlax-safearray->list (vlax-variant-value minPt)))
            (setq maxPt (vlax-safearray->list (vlax-variant-value maxPt)))
            ;; 计算尺寸
            (setq width (- (car maxPt) (car minPt))
                  height (- (cadr maxPt) (cadr minPt)))
            )
            ;; 有效性检查
            (if (and (> width 1e-6) (> height 1e-6))  ; 避免浮点误差
              (progn
                ;; 计算黄金分割点
                (setq hSplitY (+ (cadr minPt) (* height 0.618))
                (setq vSplitX (+ (car minPt) (* width 0.618)))
                ;; 创建分割线
                (entmakex (list '(0 . "LINE")
                                '(8 . "HJX-黄金线")
                                (cons 10 (list (car minPt) hSplitY 0.0))
                                (cons 11 (list (car maxPt) hSplitY 0.0))
                )
                (entmakex (list '(0 . "LINE")
                                '(8 . "HJX-黄金线")
                                (cons 10 (list vSplitX (cadr minPt) 0.0))
                                (cons 11 (list vSplitX (cadr maxPt) 0.0))
                )
              )
              (princ "\n警告: 对象尺寸过小或无效,已跳过。")
            )
          )
        )
      )
    )
    (princ "\n未选择有效对象。"))
  (princ)
)


回复 支持 反对

使用道具 举报

发表于 2025-3-8 16:35:19 | 显示全部楼层
月下闲人 发表于 2025-3-8 11:35
院长好  麻烦帮我看看哪里不对  谢谢了

(defun c:HJJ (/ *acad* *doc* ss i ent obj result minPt max ...

  1. (defun c:tt ()
  2.   (setq *doc* (vla-get-activedocument (vlax-get-acad-object)))
  3.   (vla-add (vla-get-layers *doc*) "HJX-黄金线")
  4.   (vla-put-color(vla-item (vla-get-layers *doc*)"HJX-黄金线")1)
  5.   (vla-put-linetype(vla-item (vla-get-layers *doc*)"HJX-黄金线")"Continuous")
  6.   (prompt "\n请选择对象: ")
  7.   (if (setq ss (ssget '((0 . "CIR*,ELL*,*LINE,INSERT,HATCH"))))
  8.     (repeat (setq i (sslength ss))
  9.       (setq ent (ssname ss (setq i (1- i)))
  10.             obj (vlax-ename->vla-object ent)
  11.       )
  12.       (vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p9)
  13.       (setq a  (mapcar 'vlax-safearray->list (list p1 p9))
  14.             p1 (car a)
  15.             p9 (cadr a)
  16.             yy (+ (cadr p1) (* (- (cadr p9) (cadr p1)) 0.618))
  17.             xx (+ (car p1) (* (- (car p9) (car p1)) 0.618))
  18.       )
  19.       (entmakex (list '(0 . "LINE")
  20.                       '(8 . "HJX-黄金线")
  21.                       (cons 10 (list (car p1) yy))
  22.                       (cons 11 (list (car p9) yy))
  23.                 )
  24.       )
  25.       (entmakex (list '(0 . "LINE")
  26.                       '(8 . "HJX-黄金线")
  27.                       (cons 10 (list xx (cadr p1)))
  28.                       (cons 11 (list xx (cadr p9)))
  29.                 )
  30.       )
  31.     )
  32.   )
  33.   (princ)
  34. )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-9 00:18:58 | 显示全部楼层

简洁又强大  非常棒  感谢院长赐教
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-4-1 09:35 , Processed in 0.388820 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表