找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1097|回复: 9

[编程申请]:条件有变化:如果X、Y轴比例不一致?由一点引出两直线a、b,如何求两线a、

[复制链接]
发表于 2005-8-9 17:32:18 | 显示全部楼层 |阅读模式

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

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

×
由一点引出两直线a、b,如何求两线a、b的夹角A及R、L、E、T这五要素?R由用户输入。
在X、Y轴比例一致的情况下即都是1:1的条件下求得的A角度即为实际角度,如果X轴比例为1:2000,Y轴比例为1:100,那么该如何计算A角的实际角度?
谁能提供算法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-8-9 21:34:55 | 显示全部楼层
看题目还以为是搞公路的兄弟。
你这个问题约束不够,数学上说是无穷解。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-10 08:01:35 | 显示全部楼层
即使是无穷解,也应该有一种算法。您能提供吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2005-8-10 11:07:36 | 显示全部楼层
OK,谢谢。基本上应该是这样。我试试。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-10 12:36:45 | 显示全部楼层
不好意思,写错了,求角B应该
(setq B (abs (- (angle p1 p3) (angle p1 p2))))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-10 15:00:03 | 显示全部楼层

Re: [编程申请]:由一点引出两直线a、b,如何求两线a、b的夹角A及R、L、E、T这五要素?

最初由 Andyamy 发布
[B]由一点引出两直线a、b,如何求两线a、b的夹角A及R、L、E、T这五要素?R由用户输入。

谁能提供算法? [/B]

我来试试!

  1.   [FONT=courier new]
  2. (defun dist (p1 p2 / dis)
  3.   (setq dis (distance p1 p2))
  4. )


  5. (defun zhberr (msg)
  6.   (setvar "osmode" os)
  7.   (setvar "cmdecho" 1)
  8.   (setvar "clayer" old_lay)
  9.   (setvar "dimzin" dimzin_old)
  10.   (setq *error* olderr)
  11.   (princ)
  12. )

  13. (defun c:yh (/ pt1 pt2 p11 p12 p21 p22 scale e1 e2 ne1 ne2 text text1)
  14.   (command "color" "")
  15.   (setq os (getvar "osmode")
  16.         olderr *error*
  17.         *error* zhberr
  18.   )
  19.   (princ "\n*** 路线圆弧连接V1.0,上海宝钢工程技术有限公司 周海兵编 ***")
  20.   (setvar "cmdecho" 0)
  21.   (setq old_lay (getvar "clayer"))
  22.   (setq dimzin_old (getvar "Dimzin"))
  23.   (setvar "dimzin" 8)
  24.   (if (= (tblobjname "LAYER" "T1") nil)
  25.     (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '
  26.                    (100 . "AcDbLayerTableRecord") '(6 . "CONTINUOUS") '
  27.                    (62 . 3) '(70 . 0) (cons 2 "T1")
  28.              )
  29.     )
  30.   )
  31.   (if (= (tblobjname "LAYER" "T2") nil)
  32.     (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '
  33.                    (100 . "AcDbLayerTableRecord") '(6 . "CONTINUOUS") '
  34.                    (62 . 5) '(70 . 0) (cons 2 "T2")
  35.              )
  36.     )
  37.   )
  38.   (if (= nil scaleqs) (setq scaleqs 1000))
  39.         (setq scale (getreal (strcat "\n *** 初始化比例 <" (rtos scaleqs 2 0) "> *** :")))
  40.         (if (= scale nil)
  41.                 (setq scale scaleqs)
  42.                 (setq scaleqs scale)
  43.         )
  44.   (setvar "osmode" 512)
  45.   (if (= nil r0)
  46.     (setq r0 (getvar "filletrad"))
  47.   )
  48.   (setq pt1 (getpoint "\n选择第一条线: "))
  49.   (setq pt2 (getpoint "\n选择第二条线: "))
  50.   (setvar "osmode" 0)
  51.   (prompt (strcat "\n输入圆角半径<" (rtos r0 2 0) "> m :"))
  52.   (initget 4)
  53.   (setq r (getreal))
  54.   (if (= nil r)
  55.     (setq r r0)
  56.     (setq r0 r)
  57.   )
  58.   (setvar "filletrad" r)
  59.   (setq e1 (ssget pt1))
  60.   (setq e2 (ssget pt2))
  61.   (setq ne1 (ssname e1 0))
  62.   (setq ne2 (ssname e2 0))
  63.   (command "fillet" pt1 pt2)
  64.   (setq h10 (cdr (assoc 10 (entget (entlast)))))
  65.   (setq h40 (cdr (assoc 40 (entget (entlast)))))
  66.   (setq h50 (cdr (assoc 50 (entget (entlast)))))
  67.   (setq h51 (cdr (assoc 51 (entget (entlast)))))
  68.   (setq hd  (list (+ (car h10) (* h40 (cos h50))) (+ (cadr h10) (* h40 (sin h50)))))
  69.   (setvar "filletrad" 0)
  70.   (command "fillet" pt1 pt2)
  71.   (setq p11 (cdr (assoc 10 (entget ne1))))
  72.   (setq p12 (cdr (assoc 11 (entget ne1))))
  73.   (setq p21 (cdr (assoc 10 (entget ne2))))
  74.   (setq p22 (cdr (assoc 11 (entget ne2))))
  75.   (if (< (dist pt1 p11) (dist pt1 p12))
  76.     (progn
  77.       (setq p11a p11)
  78.       (setq p12a p12)
  79.     )
  80.     (progn
  81.       (setq p11a p12)
  82.       (setq p12a p11)
  83.     )
  84.   )
  85.   (if (< (dist pt2 p21) (dist pt2 p22))
  86.     (progn
  87.       (setq p21a p21)
  88.       (setq p22a p22)
  89.     )
  90.     (progn
  91.       (setq p21a p22)
  92.       (setq p22a p21)
  93.     )
  94.   )
  95.   (if (= qstext nil) (setq qstext 1))
  96.   (setq text (getint (strcat "\n***交点序号TD <" (rtos qstext 2 0) "> : ")))
  97.   (if (= text nil)
  98.     (setq text qstext)
  99.     (setq qstext text)
  100.   )
  101.   (setq text (strcat "TD" (rtos text 2 0)))
  102.   (setvar "clayer" "T1")
  103.   (command "text" p11a (* scale 3) "0" text)

  104.   (setq ang1 (angle p11a p12a))
  105.   (setq ang2 (angle p21a p22a))
  106.   (setq ang (abs (/ (* 180.0 (- ang2 ang1)) pi)))
  107.   (setq angstr (rtos ang 2 2))
  108.   (princ (strcat "角度=" angstr ))
  109.   (setq rstr (rtos r 2 3))
  110.   (princ (strcat "r=" rstr ))
  111.   (setq L (* (/ (* 2 pi r) 360) (- 180 ang)))
  112.   (setq lstr (rtos l 2 3))
  113.   (princ (strcat "弧长=" lstr ))
  114.   
  115.   (setq tt (distance hd p11a))
  116.   (setq ttstr (rtos tt 2 3))
  117.   (princ (strcat "t=" ttstr ))
  118.   
  119.   (setq delta (- (* 2 tt) l))
  120.   (setq deltastr (rtos delta 2 3))
  121.   (princ (strcat "delta=" deltastr ))
  122.   (setq text1 (strcat angstr "  " rstr "  " lstr "  " ttstr "  " deltastr))
  123.   (setvar "clayer" "T1")
  124.   (command "text" h10 (* scale 3) "0" text1)
  125.   
  126.   (setvar "osmode" os)
  127.   (setvar "cmdecho" 1)
  128.   (setvar "clayer" old_lay)
  129.   (setvar "dimzin" dimzin_old)
  130.   (princ)
  131. )

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

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

发表于 2005-8-10 15:48:36 | 显示全部楼层
你的目的是求圆曲线的要素,将“rtl.fas”下载后存入G盘中,在程序中或命令行作如下调用即可:
(if (null rtl) (load "g:rtl.fas"));存入其它地方请注意路径
(rtl)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-10 16:17:30 | 显示全部楼层
OK,谢谢。基本上应该是这样。我试试。
试验结果不错!再次谢谢。

这是在X、Y轴比例一致的情况下即都是1:1的条件下求得的A角度,如果X轴比例为1:2000,Y轴比例为1:100,那么该如何计算A角的实际角度

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

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

发表于 2005-8-15 21:41:01 | 显示全部楼层
;请将下载的“rtl.fas”存入G盘中,并试用以下程序
(defun c:cc()
   (if (null rtl)(load "g:rtl.fas"));如存入其它地方,请更改相应的路径名
   (setq xsca (getreal "\n请输入X轴比例尺分母<1>:")
         ysca (getreal "\n请输入Y轴比例尺分母<1>:")
   )
   (if (= xsca nil) (setq xsca 1))
   (if (= ysca nil) (setq ysca 1))
   (setq xybl (list (/ xsca 1000.0) (/ ysca 1000.0)))
   (while (setq r (getreal "\n请输入实际的转角半径R:"))
      (initget "L A")
      (setq fhb nil
            nbz (getkword "\n指定两直线(L)/指定圆弧(A)[L/A]:")
      )
      (cond ((= nbz "L")
             (if (and (setq en1  (car (entsel "\n请指定直线a:")))
                      (setq en2  (car (entsel "\n请指定直线b:")))
                 )
                 (setq fhb (rtl1 en1 en2 r xybl));fhb=(转角 半径 切线长 曲线长 外矢距 要素字符串)
                 (alert "只指定了一条直线或者两条直线均未指定!")
              )
            )
            ((= nbz "A")
             (if (setq en1  (car (entsel "\n请指定圆弧:")))
                 (setq fhb (rtl2 en1 r xybl));fhb=(转角 半径 切线长 曲线长 外矢距 要素字符串)
                 (alert "未指定圆弧!")
              )
               )
      )
      (if fhb (alert (last fhb)))
   )            
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 15:32 , Processed in 0.394028 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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