找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 651|回复: 14

[研讨] 平分线的原理

[复制链接]

已领礼包: 149个

财富等级: 日进斗金

发表于 2017-5-17 18:35:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 明天你好 于 2017-5-17 20:39 编辑

下面的代码除了可以平分角,平分平行线,还能平分什么?


  1. ;;;;;;;;;;;;;;软绵绵绘制平分线;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;;;;;;;;;;;;BY YJR111 2011-11-19;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;;;;;;;;;;;;;可自由传播,但请保留原著者信息,谢谢!;;;;;;;;;;;
  4. (defun c:pfx(/ fglst please input others youself 3q vla_e1 vla_e2)
  5.   (vl-load-com)
  6.   (SETQ oldosmode(GETVAR  "OSMODE" ))
  7.   (SETQ oldltscale(GETVAR  "ltscale" ))
  8.   (SETQ oldceltscale(GETVAR  "celtscale" ))
  9.   (setvar "cmdecho" 0)
  10.   (setvar "osmode" 0)
  11.   (setvar "ltscale" 1)
  12.   (setvar "celtscale" 1)
  13.   (setvar "cecolor" "1");;;;颜色红色
  14.   (command "linetype" "s" "center" "");;;;线型center
  15.   (setq sss(ssadd))
  16.   (setq myms(vla-get-modelspace (setq mydoc(vla-get-activedocument(vlax-get-acad-object))));;;模型空间
  17.         myss(vla-get-SelectionSets mydoc)
  18.         myutility(vla-get-utility mydoc)
  19.         mylayer(vla-get-layers mydoc)
  20.         mylinetypes(vla-get-linetypes mydoc))
  21.   (initget 6)
  22.   (if (and(=(type *num_fenge*)'int)*num_fenge*) (setq num_fenge (getint (strcat "\n请选择平分的数目<" (rtos *num_fenge* 2 0)">")))
  23.                   (progn(setq num_fenge (getint  "\n请选择平分的数目" ))
  24.                         (if (/=(type num_fenge)'int)(progn
  25.                           (princ"\n输入的数字类型不对,请输入整数!")
  26.                             (setq num_fenge (getint  "\n请选择平分的数目" ))))
  27.   )
  28.    )
  29.   (if (not num_fenge)(setq num_fenge *num_fenge*)(setq *num_fenge* num_fenge ))
  30.   (while(and(setq e1 (car(setq nentsel_e1(nentselp"\n请选择第一条线<右键退出>:"))))
  31.         (setq e2 (car(setq nentsel_e2(nentselp"\n请选择第二条线<右键退出>:")))))
  32.   (setq point_e1 (cadr nentsel_e1))
  33.   (setq s1 (entget e1))
  34.   (setq point_e2 (cadr nentsel_e2))
  35.   (setq s2 (entget e2))
  36.   (setq vla_e1(vlax-ename->vla-object e1))
  37.   (setq vla_e2(vlax-ename->vla-object e2))
  38.     (if (<= (length nentsel_e1) 2)
  39.        (setq point_e1(vlax-curve-getClosestPointTo vla_e1 point_e1 ))
  40.    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OCS和WCS之间的转换;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  41.       (progn
  42.       (setq vla_ee1 (vlax-ename->vla-object(caar(reverse nentsel_e1)))
  43.             xsca(vla-get-XScaleFactor vla_ee1)
  44.             ysca(vla-get-YScaleFactor vla_ee1)
  45.             zsca(vla-get-ZScaleFactor vla_ee1)
  46.             rto(vla-get-rotation vla_ee1)
  47.             insertp(cdr(assoc 10(entget(caar(reverse nentsel_e1))))))
  48.              (setq shuzu1 (caddr nentsel_e1))
  49.              (setq variant_shuzu1 (vlax-make-safearray  vlax-vbDouble '(0 . 3)'(0 . 3) ))
  50.              (command "undo" "be" )
  51.              (vlax-safearray-fill variant_shuzu1 shuzu1)
  52.              (vla-transformby vla_e1 variant_shuzu1)
  53.              (command "undo" "e" )
  54.              (setq point_e1(vlax-curve-getClosestPointTo vla_e1 point_e1 ))
  55.              (command "undo" 1 )
  56.             )
  57.       )        
  58.     (if (<= (length nentsel_e2) 2)
  59.       (setq point_e2(vlax-curve-getClosestPointTo vla_e2 point_e2 ))
  60.    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OCS和WCS之间的转换;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  61.       (progn
  62.       (setq vla_ee2 (vlax-ename->vla-object(caar(reverse nentsel_e2)))
  63.             xsca(vla-get-XScaleFactor vla_ee2)
  64.             ysca(vla-get-YScaleFactor vla_ee2)
  65.             zsca(vla-get-ZScaleFactor vla_ee2)
  66.             rto(vla-get-rotation vla_ee2)
  67.             insertp(cdr(assoc 10(entget(caar(reverse nentsel_e2))))))
  68.              (setq shuzu2 (caddr nentsel_e2))
  69.              (setq variant_shuzu2 (vlax-make-safearray  vlax-vbDouble '(0 . 3)'(0 . 3) ))
  70.              (command "undo" "be" )
  71.              (vlax-safearray-fill variant_shuzu2 shuzu2)
  72.              (vla-transformby vla_e2 variant_shuzu2)
  73.              (command "undo" "e" )
  74.              (setq point_e2(vlax-curve-getClosestPointTo vla_e2 point_e2 ))
  75.              (command "undo" 1 )
  76.             )
  77.       )
  78.   (if (=(vla-get-objectname vla_e1)"AcDbLine" )
  79.   (progn
  80.   (changedxf10<->11  s1)
  81.   (entupd e1)
  82.   (setq s1 ss ss nil )
  83.   (setq dxf10_e1(cdr (assoc 10 s1))
  84.         dxf11_e1(cdr (assoc 11 s1)))
  85.   (setq vla_e1_ang(vla-get-angle vla_e1))
  86.   ))
  87.   (if (=(vla-get-objectname vla_e2)"AcDbLine" )
  88.   (progn
  89.   (changedxf10<->11  s2)
  90.   (entupd e2)
  91.   (setq s2 ss ss nil)
  92.   (setq dxf10_e2(cdr (assoc 10 s2))
  93.         dxf11_e2(cdr (assoc 11 s2)))
  94.   (setq vla_e2_ang(vla-get-angle vla_e2))
  95.   ))
  96.     (if (=(vla-get-objectname vla_e1)"AcDbPolyline" )
  97.     (progn
  98.         (setq pline1_dxf10(vla-get-coordinates vla_e1))
  99.         (setq dxf_e1 (vlax-safearray->list(vlax-variant-value pline1_dxf10)))
  100.         (setq  fglst nil)
  101.         (fgb dxf_e1)
  102.         (setq dxf10_lst fglst n 0)
  103.         (if (> (length nentsel_e1) 2)
  104.           (progn
  105.         (setq dxf10_lst(mapcar (function(lambda(x)(trans  x (caar(reverse nentsel_e1)) 0)))dxf10_lst));;;;;;;增加Z坐标
  106.         (setq dxf10_lst(mapcar (function(lambda(x)(ocs->wcs x shuzu1);;;;;;;;;多段线顶点坐标列表转换到WCS
  107.                                           )
  108.                                         )
  109.                                                        dxf10_lst))
  110.         ))
  111.         (while(< n (length dxf10_lst))
  112.                 (cond ((< n (1-(length dxf10_lst)))(setq nthn1 (nth n dxf10_lst))(setq nthn2 (nth (1+ n) dxf10_lst)))
  113.                       ((= n (1-(length dxf10_lst)))(setq nthn1 (nth n dxf10_lst))(setq nthn2 (nth 0 dxf10_lst)))
  114.                 )
  115.           (setq point_ee1(vlax-curve-getClosestPointTo (setq vla_e1(vla-addline myms (vlax-3d-point nthn1)(vlax-3d-point nthn2)))point_e1 ))
  116.                 (if (not (and(equal (car point_e1)(car point_ee1) 1e-3)(equal (cadr point_e1)(cadr point_ee1) 1e-3)(equal (caddr point_e1)(caddr point_ee1) 1e-3)))
  117.                 (progn
  118.                 (vla-delete vla_e1);;;;;删除辅助线
  119.                 (setq n(1+ n))
  120.                 )
  121.                 (progn
  122.                 (setq e1(vlax-vla-object->ename vla_e1))
  123.                 (setq s1 (entget e1))
  124.                 (setq sss (ssadd))
  125.                 (setq sss(ssadd e1 sss ))
  126.                 (setq n (length dxf10_lst));;;;;;;确保找到后退出循环
  127.                 )
  128.                 )
  129.          )
  130.   (if (=(vla-get-objectname vla_e1)"AcDbLine" )
  131.   (progn
  132.   (changedxf10<->11 s1);;;;;;直线起点终点统一方向
  133.   (setq s1 ss ss nil)
  134.   (entupd e1)
  135.   (setq dxf10_e1(cdr (assoc 10 s1))
  136.         dxf11_e1(cdr (assoc 11 s1)))
  137.   (setq vla_e1_ang(vla-get-angle vla_e1))
  138.   ))                        
  139.        )
  140.   )

  141.   (if (=(vla-get-objectname vla_e2)"AcDbPolyline" )
  142.     (progn
  143.         (setq pline2_dxf10(vla-get-coordinates vla_e2))
  144.         (setq dxf_e2 (vlax-safearray->list(vlax-variant-value pline2_dxf10)))
  145.         (setq  fglst nil)
  146.         (fgb dxf_e2);;;;分割多段线顶点列表
  147.         (setq dxf10_lst fglst n 0)
  148.         (if (> (length nentsel_e2) 2)
  149.           (progn
  150.              (setq dxf10_lst(mapcar (function(lambda(x)(trans  x (caar(reverse nentsel_e2)) 0)))dxf10_lst))
  151.         (setq dxf10_lst(mapcar (function(lambda(x)(ocs->wcs x shuzu2)
  152.                                           )
  153.                                         )
  154.                                                        dxf10_lst))
  155.         ))
  156.         (while(< n (length dxf10_lst))
  157.                 (cond ((< n (1-(length dxf10_lst)))(setq nthn1 (nth n dxf10_lst))(setq nthn2 (nth (1+ n) dxf10_lst)))
  158.                       ((= n (1-(length dxf10_lst)))(setq nthn1 (nth n dxf10_lst))(setq nthn2 (nth 0 dxf10_lst)))
  159.                 )
  160.   ;;;;;;怪事了,点表比较时就算一模一样也会认为不一样,不知道怎么回事,只能XYZ各个比较了;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  161.              (setq point_ee2(vlax-curve-getClosestPointTo (setq vla_e2(vla-addline myms (vlax-3d-point nthn1)(vlax-3d-point nthn2)))point_e2 ))
  162.                 (if (not (and(equal (car point_e2)(car point_ee2) 1e-3)(equal (cadr point_e2)(cadr point_ee2) 1e-3)(equal (caddr point_e2)(caddr point_ee2) 1e-3)))
  163.                 ;(vlax-curve-getClosestPointTo (setq vla_e2(vla-addline myms (vlax-3d-point nthn1)(vlax-3d-point nthn2)))point_e2 )))
  164.                 (progn
  165.                 (vla-delete vla_e2)
  166.                 (setq n(1+ n))
  167.                 )
  168.                 (progn
  169.                 (setq e2(vlax-vla-object->ename vla_e2))
  170.                 (setq s2 (entget e2))
  171.                 (setq sss(ssadd e2 sss ))
  172.                 (setq n (length dxf10_lst))
  173.                 )
  174.                                      )
  175.                            )
  176.   (if (=(vla-get-objectname vla_e2)"AcDbLine" )
  177.   (progn
  178.   (changedxf10<->11  s2)
  179.   (entupd e2)
  180.   (setq s2 ss ss nil)
  181.   (setq dxf10_e2(cdr (assoc 10 s2))
  182.         dxf11_e2(cdr (assoc 11 s2)))
  183.   (setq vla_e2_ang(vla-get-angle vla_e2))
  184.   ))

  185.        )   
  186.    )


  187.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;当角度相等时;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  188.     (cond((or(EQUAL  vla_e1_ang vla_e2_ang 1E-4)
  189.              (EQUAL (abs(-  vla_e1_ang vla_e2_ang )) pi 1e-4))
  190.          
  191.           ;;;;;;;;;;;;;;;;;;可按要求数量平分距离;;;;;;;;;;;;;;;;;;;;;;;;;;;
  192.            (setq n 1)
  193.            (repeat (1- *num_fenge*)
  194.            
  195.              (if (and(=(cdr(assoc 0(entget(car nentsel_e1))))"LINE" )(=(cdr(assoc 0(entget(car nentsel_e2))))"LINE" )
  196.                      (/=(last (cadr shuzu1))0)(/=(last (cadr shuzu2))0)(> (length nentsel_e1) 2)(> (length nentsel_e2) 2))
  197.              (progn
  198.              (command "undo" "be" )
  199.              (vlax-safearray-fill variant_shuzu1 shuzu1)
  200.              (vla-transformby vla_e1 variant_shuzu1)
  201.               (vlax-safearray-fill variant_shuzu2 shuzu2)
  202.              (vla-transformby vla_e2 variant_shuzu2)
  203.              (command "undo" "e" )
  204.              (setq point_e1_start(3d->2d(vlax-safearray->list(vlax-variant-value(vla-get-startpoint vla_e1  )))))
  205.              (setq point_e1_end(3d->2d(vlax-safearray->list(vlax-variant-value(vla-get-endpoint vla_e1  )))))
  206.               (if (>(cadr point_e1_start)(cadr point_e1_end))(progn
  207.                 (setq point_e1_start(list (car point_e1_start)(cadr point_e1_end)0.0))
  208.                 (setq point_e1_end(list (car point_e1_end)(cadr point_e1_start)0.0))
  209.                 ))
  210.              (setq point_e2_start(3d->2d(vlax-safearray->list(vlax-variant-value(vla-get-startpoint vla_e2  )))))
  211.              (setq point_e2_end(3d->2d(vlax-safearray->list(vlax-variant-value(vla-get-endpoint vla_e2  )))))
  212.              (if (>(cadr point_e2_start)(cadr point_e2_end))(progn
  213.                 (setq point_e2_start(list (car point_e2_start)(cadr point_e2_end)0.0))
  214.                 (setq point_e2_end(list (car point_e2_end)(cadr point_e2_start)0.0))
  215.                 ))
  216.              (command "undo" 1 )
  217.              (setq myline(vla-addline myms (vlax-3d-point point_e1_start)(vlax-3d-point point_e1_end)))
  218.              (setq dist_num(/(distance dxf10_e1 dxf10_e2) *num_fenge* ))
  219.              (vla-move myline  (vlax-3d-point point_e1_start) (vlax-3d-point(polar point_e1_start (angle point_e1_start point_e2_start) (* dist_num n))))
  220.             
  221.              )
  222.               (progn
  223.              (setq myline(vla-copy  vla_e1))
  224.              (setq dist_num(/(distance dxf10_e1 dxf10_e2) *num_fenge* ))
  225.              (vla-move myline  (vlax-3d-point dxf10_e1) (vlax-3d-point(polar dxf10_e1 (angle dxf10_e1 dxf10_e2) (* dist_num n))))
  226.             
  227.              )
  228.                )
  229.              (setq n (1+ n))
  230.              )
  231.           (princ (strcat "\n 平分后间距为" (rtos dist_num 2 2) ))
  232.          )
  233. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;当角度不相等时;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  234.          ((and(/= vla_e1_ang vla_e2_ang)(wcmatch(vla-get-objectname vla_e1)"*Line" ))
  235.           (if (setq inters_e1_e2 (inters dxf10_e1 dxf11_e1 dxf10_e2 dxf11_e2 ))
  236.               (progn
  237.               (setq myline1 (vla-addline myms (vlax-3d-point inters_e1_e2) (vlax-3d-point point_e1)))
  238.               (setq myline1_ang(vla-get-angle myline1))
  239.               
  240.               (setq myline2 (vla-addline myms (vlax-3d-point inters_e1_e2) (vlax-3d-point point_e2)))
  241.               (setq myline2_ang(vla-get-angle myline2))
  242.               
  243.               (if (or(and(>= myline1_ang pi )(>= myline2_ang pi ))(and(<= myline1_ang pi )(<= myline2_ang pi ))
  244.                      (and (> myline1_ang (/ pi 2))(< myline1_ang myline2_ang))
  245.                      (and(> myline1_ang myline2_ang)(> (* 1.5 pi) myline1_ang pi )))
  246.               (setq  inters_angle (- myline1_ang  myline2_ang))
  247.                 (progn
  248.                 (if (< myline1_ang myline2_ang)
  249.                (setq  inters_angle (- myline1_ang  (- myline2_ang (* 2 pi))))
  250.                (setq  inters_angle (-(- myline1_ang (* 2 pi)) myline2_ang ))
  251.                )
  252.                )
  253.                 )
  254. ;;;              (vla-rotate myline1 (vlax-3d-point inters_e1_e2) (* -1(/ inters_angle 2)))
  255.               ;;;;;;;;;;;;;;;;;;可按要求数量平分角度;;;;;;;;;;;;;;;;;;;;;;;;;;;
  256.               (repeat (1- *num_fenge*)
  257.               (setq angle_num (* -1(/ inters_angle *num_fenge*)))
  258.               (vla-rotate myline1 (vlax-3d-point inters_e1_e2)  angle_num)
  259.               (setq myline1(vla-copy myline1))
  260.               )
  261.               (vla-delete myline2)
  262.               (princ (strcat "\n 平分后角度为" (rtos (abs(*(/ angle_num pi)180)) 2 2) ))
  263.               )
  264.               (progn
  265.               (if (setq inters_e1_e2 (inters dxf10_e1 dxf11_e1 dxf10_e2 dxf11_e2 nil))
  266.               (progn
  267.             (princ"\n无交点的两条线仅考虑一条平分线,与平分数量无关!也不影响平分数量的输入!")
  268.             (setq inters_e1_angle (angle inters_e1_e2 dxf10_e1))
  269.             (setq inters_e2_angle (angle inters_e1_e2 dxf10_e2))
  270.             (if (> inters_e1_angle inters_e2_angle)
  271.             (setq myline(vla-addline myms (vlax-3d-point inters_e1_e2)
  272.                         (vlax-3d-point(polar inters_e1_e2 (setq inters_angle(+(/(- inters_e1_angle inters_e2_angle)2)inters_e2_angle))(vla-get-length vla_e1)))))
  273.             (setq myline(vla-addline myms (vlax-3d-point inters_e1_e2)
  274.                         (vlax-3d-point(polar inters_e1_e2 (setq inters_angle(+(/(- inters_e2_angle inters_e1_angle)2)inters_e1_angle))(vla-get-length vla_e1)))))
  275.             )
  276.             (vla-move myline (vlax-3d-point inters_e1_e2) (if (>= inters_angle  pi )
  277.                                                               (vlax-3d-point (polar dxf11_e1 (angle dxf11_e1 dxf11_e2)(/(distance dxf11_e1 dxf11_e2)2)))
  278.                                                               (vlax-3d-point (polar dxf10_e1 (angle dxf10_e1 dxf10_e2)(/(distance dxf10_e1 dxf10_e2)2)))) )
  279.            )
  280.             )
  281.               (princ (strcat "\n 平分后角度为" (rtos (abs(*(/ (if (> inters_angle pi)(setq inters_angle (- inters_angle (* 1.5 pi) ))inters_angle)pi) 180)) 2 2) ))
  282.           )
  283.           )

  284.           )
  285.           )
  286.   (if (or(=(vla-get-objectname vla_e1)"AcDbCircle" )(=(vla-get-objectname vla_e1)"AcDbArc" ))
  287.   (progn
  288.   (setq center (vla-get-center vla_e1)
  289.         radius (vla-get-radius vla_e1)
  290.      )
  291.   (cond((=(vla-get-objectname vla_e1)"AcDbArc" )
  292.   (setq myline (vla-addline myms center (vla-get-startpoint vla_e1))
  293.         angle_total  (vla-get-totalangle vla_e1))
  294.     )
  295.        (t(setq myline (vla-addline myms center (vlax-3d-point point_e1))
  296.                angle_total  (* pi 2)))
  297.      )
  298.   (setq n 1)
  299.   (repeat (1- *num_fenge*)
  300.   (setq myline(vla-copy  myline))
  301.   (setq angle_num (/  angle_total   *num_fenge*))
  302.   (vla-rotate myline center angle_num)
  303.    (setq n (1+ n))
  304.   )
  305.   (princ (strcat "\n 平分后角度为" (rtos (abs(*(/ angle_num pi)180)) 2 2) ))
  306.     )
  307.     )

  308. ;;;;;;;;;;;;;;;;;;;;删除根据多段线复制出的局部线段;;;;;;;;;;;;;;;;;;;;;;;;;;
  309.     (setq n 0)
  310.     (if (>(sslength sss)0)
  311.     (repeat (sslength sss)
  312.     (command "erase" (ssname sss n) "")
  313.       (setq n(1+ n))
  314.       )
  315.     )
  316.      )
  317.    (SETvar  "osmode" oldosmode)
  318.    (SETvar  "ltscale" oldltscale)
  319.   (princ "\n 谢谢使用软绵绵绘制平分线, by yjr111")
  320.    (princ)
  321.   )


  322. ;;;;;;;;;;;;;;;;;;;;;;;;;;;将表内元素每2个进行分割重新组表;;;;;;;;;;;;;;;;;;;;;;;;;
  323. ;;;(setq lst '(20882.6 12429.7 35344.0 12429.7 35344.0 8473.39 20882.6 8473.39))
  324. ;;;(fgb lst) ((20882.6 12429.7)(35344.0 12429.7)(35344.0 8473.39)(20882.6 8473.39))
  325. (defun fgb(lst / fglst1 dxf10 n)
  326. (setq n 0 i 0)
  327. (repeat (/(length lst)2)
  328.    (repeat 2
  329.     (setq  dxf10 (nth n lst))
  330.     (setq fglst1 (append fglst1 (list dxf10 )))
  331.     (setq n (1+ n))
  332.     )
  333.   (setq fglst (append  fglst (list fglst1 )))
  334.   (setq fglst1 nil)
  335.   (setq i(1+ i))
  336.   )
  337.   )
  338. ;;;;;;;;;;;;;;;;;对直线的起点和终点进行处理,使角度均小于pi;;;;;;;;;;;;;;;;;;;
  339. (defun changedxf10<->11(s)
  340. (cond((or(> (cadr (cdr(assoc 10 s))) (cadr (cdr(assoc 11 s))))
  341.           (and(= (cadr (cdr(assoc 10 s))) (cadr (cdr(assoc 11 s))))
  342.           (>(car (cdr(assoc 10 s))) (car (cdr(assoc 11 s)))))
  343.           )
  344.       (setq s(subst (cons 12 (cdr(assoc 10 s))) (assoc 10 s) s))
  345.       (setq s(subst (cons 10 (cdr(assoc 11 s))) (assoc 11 s) s))
  346.       (setq s(subst (cons 11 (cdr(assoc 12 s))) (assoc 12 s) s))
  347.       (entmod s)

  348.    )
  349.     )
  350.    (setq ss s)
  351.     )
  352. ;;;;;;;;;;;;;;;;;;;;;ocs->wcs;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  353. (defun ocs->wcs(p1 shuzu )
  354.       (setq shuzu_nth0 (nth 0 shuzu) shuzu_nth1 (nth 1 shuzu) shuzu_nth2 (nth 2 shuzu) shuzu_nth3 (nth 3 shuzu))
  355.       (setq trans_point (list (+(*(car p1)(car shuzu_nth0))(*(cadr p1)(cadr shuzu_nth0))(*(caddr p1)(caddr shuzu_nth0))(cadddr shuzu_nth0) )
  356.                      (+(*(car p1)(car shuzu_nth1))(*(cadr p1)(cadr shuzu_nth1))(*(caddr p1)(caddr shuzu_nth1))(cadddr shuzu_nth1) )
  357.                      (+(*(car p1)(car shuzu_nth2))(*(cadr p1)(cadr shuzu_nth2))(*(caddr p1)(caddr shuzu_nth2))(cadddr shuzu_nth2) )
  358.                 )
  359.       )
  360.     (setq point_e trans_point)
  361.     )
  362. ;;;;;;;;;;;;;;;;3Dpoint->2Dpoint;;;;;;;;;;;;;;;;;;;;;;;
  363. (defun 3d->2d(p)
  364.   (setq p (list(car p)(cadr p)0.0))
  365.   )
  366. (princ "\n 软绵绵绘制平分线程序,BY YJR111 命令:pfx")




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-17 18:51:58 | 显示全部楼层
你这问题让人不好回答啊,得仔细的看代码啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 149个

财富等级: 日进斗金

 楼主| 发表于 2017-5-17 19:00:34 | 显示全部楼层

呵呵,是要看代码
本人能力差,太码又太长,看得头晕了

感觉有平分圆弧和圆 ,但是圆弧和圆怎么平分呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-17 19:04:52 | 显示全部楼层
也就是平分线,没其他什么功能
而且不相交的,画的也不对

搜狗截图20170517190332.png

另外,楼主,再贴代码,先用VLIDE美化下代码,然后用发帖界面 下排 倒数第四个按钮 专门贴代码用的,你试试。 别这么贴一整个页面。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-17 19:11:32 | 显示全部楼层

弧线即使选两条,它也只给第一条弧线平分下

搜狗截图20170517190935.png


这代码你还是少看,......
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 149个

财富等级: 日进斗金

 楼主| 发表于 2017-5-17 19:18:21 | 显示全部楼层
据说这是一个大师的代码....

我浏览器好像有问题,点<> code 没反应  ,版主帮我修改下吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-17 19:23:46 | 显示全部楼层

你得学会贴代码,不用那个按钮,你可以
把代码 放到 {code=lisp}{/code}之间, { 贴的时候,换成 [ ,   }换成 ]


如你这么说,这代码也是大师小时候写的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-5-17 22:10:54 | 显示全部楼层
看这样的代码累,缺乏层次,很多功能应该设计成函数调用,主程序根据条件分之处理,这样代码容易维护,让人容易看懂。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

发表于 2017-5-17 23:24:18 | 显示全部楼层
有没有平分空间三点的角平分线的函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-5-18 00:07:59 | 显示全部楼层
本帖最后由 marting 于 2017-5-18 00:48 编辑

不管怎么空间,三点都决定一个平面, 两边单位向量相加,就是角分线的单位向量

  1. ;;;-----------------------------------------------------------;;
  2. ;;; 两向量相加 addition                                       ;;
  3. ;;; Input: v1,v2 -vectors in R^n                              ;;
  4. ;;; OutPut: A vector                                          ;;
  5. ;;;-----------------------------------------------------------;;
  6. (defun XD::Vec:v+v (v1 v2)
  7.   (mapcar '+ v1 v2)
  8. )
  9. ;;;-----------------------------------------------------------;;
  10. ;;; 单位向量                                                      ;;
  11. ;;; Unit Vector                                               ;;
  12. ;;; Args: v - vector in R^n                                      ;;
  13. ;;;-----------------------------------------------------------;;
  14. (defun XD::Vec:Normalize (v)
  15.   ((lambda (n)
  16.      (if (equal 0.0 n 1e-14)
  17.        nil
  18.        (XD::VEC:v*s v (/ 1.0 n))
  19.      )
  20.    )
  21.     (XD::VEC:length v)
  22.   )
  23. )
  24. ;;;-----------------------------------------------------------;;
  25. ;;; 向量乘标量(系数)                                              ;;
  26. ;;; Vector x Scalar                                                 ;;
  27. ;;; Args: v - vector in R^n, s - real scalar                ;;
  28. ;;;-----------------------------------------------------------;;
  29. (defun XD::Vec:v*s (v s)
  30.   (mapcar (function (lambda (n) (* n s))) v)
  31. )
  32. ;;;-----------------------------------------------------------;;
  33. ;;; 向量的模(长度)                                              ;;
  34. ;;; Vector Norm                                                        ;;
  35. ;;; Args: v - vector in R^n                                      ;;
  36. ;;;-----------------------------------------------------------;;
  37. (defun XD::Vec:length (v)
  38.   (sqrt (apply '+ (mapcar '* v v)))
  39. )



  1. (defun jfx (p1 p2 p3)
  2.   (setq v1  (mapcar '- p1 p2)
  3.         v2  (mapcar '- p3 p2)
  4.         vx  (xd::vec:v+v v1 v2)
  5.         len (xd::vec:length vx)
  6.         v1 (xd::vec:normalize v1)
  7.         v2 (xd::vec:normalize v2)
  8.         vx  (xd::vec:v+v v1 v2)
  9.         vx  (xd::vec:normalize vx)
  10.   )
  11.   (list p2 (mapcar '+ p2 (xd::vec:v*s vx len)))
  12. )





QQ截图20170518002612.png

QQ截图20170518004746.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2017-5-18 00:09:30 | 显示全部楼层
谢谢分享。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 149个

财富等级: 日进斗金

 楼主| 发表于 2017-5-18 08:23:19 | 显示全部楼层

如果要做N等分呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 149个

财富等级: 日进斗金

 楼主| 发表于 2017-5-18 11:10:14 | 显示全部楼层

bisector.png

版主,要做到上图两种情景的均分, 有什么方法和思路呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-18 11:31:58 | 显示全部楼层

上面矩阵的函数都给你了


1、两向量的点积,等于 两向量的夹角夹角余弦,用反余弦函数,就能求得夹角
2、夹角除以等分数,就能得到几等分后的一个夹角,然后你用向量旋转角度就可以很方便的求另一个点
     循环等分数,夹角乘以倍数,算第二个,第N个 夹角.....

两个向量平行(平行线,你图二),向量点积=1.0

这个你就多次OFFSET就行了,论坛有代码,用OFFSET搜索论坛。

建议你搜索下论坛和 网络,找向量的几何意义方面的文献看看。

http://bbs.xdcad.net/thread-677302-1-1.html

http://bbs.xdcad.net/thread-451891-1-1.html

用  计算几何  搜索论坛, 看看 算**坛的一些知识。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-18 12:00:54 | 显示全部楼层
这有个计算几何常用算法,看看

http://bbs.xdcad.net/thread-704410-1-1.html

矩阵,向量的LISP函数,论坛都有
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-21 17:18 , Processed in 0.448902 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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