找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1443|回复: 10

[原创]:已知圆弧的起点、终点和弧长(或者弓高、或者弓弦比)求半径和圆心

[复制链接]

已领礼包: 111个

财富等级: 日进斗金

发表于 2005-9-18 11:09:09 | 显示全部楼层 |阅读模式

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

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

×
;已知圆弧的起点、终点和弧长(或者弓高、或者弓弦比)求半径和圆心
;1.下载文件“bjyx.vlx”
;  并存到“G”盘中,如存入其它地方,
;  请更改程序中第二中的相应路径名。
;2.文件“bjyx.vlx”中包含以下三个函数:
;  (1)已知圆弧起点、终点和弓弦比,求半径和圆心 "bjyx0";
;  (2)已知圆弧起点、终点和弓高,求半径和圆心 "bjyx1";
;  (3)已知圆弧起点、终点和弧长,求半径和圆心 "bjyx2"。
;3.规定:
;  (1)由起点沿着圆弧向终点方向,圆弧向左转的弓弦比、弓高和弧长均输入负值;
;  (2)由起点沿着圆弧向终点方向,圆弧向右转的弓弦比、弓高和弧长均输入正值。
;4.调用方式:
;  (1) (bjyx0  起点  终点  弓弦比)
;  (2) (bjyx1  起点  终点  弓高)
;  (3) (bjyx2  起点  终点  弧长)
;5.返回值:(半径 圆心)
;6.在Auto CAD中加载以下测试程序,按要求输入数据即可
;6.算例
;  (1) 起点   x=184.2344 y=228.7468
;      终点   x=253.9234 y= 229.0668
;      选择0
;      弓弦比 0.470903
;      返回值 (45.2033 (219.3227 199.9785))
;  (2) 起点   x=253.9234 y= 229.0668
;      终点   x=184.2344 y=228.7468
;      选择0
;      弓弦比 -0.470903
;      返回值 (45.2034 (219.3227 199.9784))
;  (3) 起点   x=184.2344 y=228.7468
;      终点   x=253.9234 y= 229.0668
;      选择1
;      弓弦比 16.409
;      返回值 (45.2034 (219.3227 199.9785))
;  (4) 起点   x=253.9234 y= 229.0668
;      终点   x=184.2344 y=228.7468
;      选择1
;      弓弦比 -16.409
;      返回值 (45.2033 (219.3227 199.9785))
;  (5) 起点   x=184.2344 y=228.7468
;      终点   x=253.9234 y= 229.0668
;      选择2
;      弓弦比 79.5761
;      返回值 (45.2032 (219.3227 199.9787))
;  (6) 起点   x=253.9234 y= 229.0668
;      终点   x=184.2344 y=228.7468
;      选择2
;      弓弦比 -79.5761
;      返回值 (45.2037 (219.3227 199.9787))

(defun c:cc()
   (if (null bjyx0)(load "g:bjyx.vlx"));请注意文件“bjyx.vlx”存盘路径名
   (setq p1 (getpoint "\n请输入圆弧起点:")
         p2 (getpoint p1 "\n请输入圆弧终点:")
   )
   (initget 1 "0 1 2")
   (setq nbz (getkword "\n请选择弓弦比(0)/弓高(1)/弧长(2):")
         l   (cond ((= nbz "0") (getreal "\n请输入圆弧的弓弦比="))
                   ((= nbz "1") (getreal "\n请输入圆弧的弓高="))
                   ((= nbz "2") (getreal "\n请输入圆弧的长度="))
             )
         zb  (eval (read (strcat "(bjyx" nbz  " p1 p2 l)")))
   )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-9-18 11:27:15 | 显示全部楼层
楼主
我已加载,经测试不行啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

 楼主| 发表于 2005-9-18 11:38:27 | 显示全部楼层
请问下载后的“bjyx.vlx”存在什么地方?
在命令行执行是“CC"命令,而不是“bjyx”命令。
另外,cc程序中“(if (null "bjyx0.vlx")(load "g:bjyx.vlx"))”
应改为(if (null bjyx0)(load "g:bjyx.vlx"))。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-18 12:42:28 | 显示全部楼层
使用系统的“属性”命令可查询除VC自定义实体以外的所有实体信息,故我觉得该程序适应性不大!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-18 20:26:19 | 显示全部楼层
函数bjyx2似乎是用逼近法画弧线,数据不准:仅精确到小数点后10位!
三角函数无精确解法!
  1. [FONT=courier new](load "bjyx")
  2. (defun c:test ()
  3.   (setq        p1 (list 0 0)
  4.         p2 (list 1000 0)
  5.         L  1200
  6.   )
  7.   (bjyx2 p1 p2 L)
  8.   (setq s1 (entlast))
  9.   (setq        leng (rtos (vlax-curve-getDistAtParam
  10.                      s1
  11.                      (vlax-curve-getEndParam s1)
  12.                    )
  13.                    2
  14.                    12
  15.              )
  16.   )
  17.   leng
  18. )[/FONT]

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

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

 楼主| 发表于 2005-9-19 08:41:32 | 显示全部楼层
凭现有计量设备,在市政工程中,精确到小数点后第4位就足咦。该函数在市政工程中实用性很大,在别的行当真是没用处。在实际工程应用中,请问班竹xyp1964要精确到小数点后多少位才算数据准确?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-19 09:41:39 | 显示全部楼层
最初由 yshf 发布
[B]凭现有计量设备,在市政工程中,精确到小数点后第4位就足咦。该函数在市政工程中实用性很大,在别的行当真是没用处。在实际工程应用中,请问班竹xyp1964要精确到小数点后多少位才算数据准确? [/B]

对于工程来说小数点后3位就足够了!程序本身还是不错的。
本人对“已知两点和弧长画弧”的命题较感兴趣,一直未能找到精确的算法和程序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-9-19 21:25:10 | 显示全部楼层
逼近法:(还不如楼主的精确)
  1. [FONT=courier new];;;起点、终点和弧长画圆弧
  2. (defun c:test ()
  3.   (cmdla0)
  4.   (setq        pt1 (getpoint "\圆弧端点 : ")
  5.         pt2 (getpoint pt1 "\圆弧终点 : ")
  6.         no1 (UREAL 7 "" "\n弧长" no1)
  7.         a   (/ (distance pt1 pt2) 2.0)
  8.         l   (/ no1 2.0)
  9.         b   0.001
  10.   )
  11.   (if (> l b)
  12.     (progn
  13.       (while (< (/ b (sin b)) (/ l a 1.0))
  14.         (setq b (+ b 0.000001))
  15.       )
  16.       (setq ang (rad2ang (* b 2)))
  17.     )
  18.   )
  19.   (mkla"圆弧"1)
  20.   (setvar "osmode"0)
  21.   (command "arc" pt1 "e" pt2 "a" ang)
  22.   (princ "弧长误差 = ")
  23.   (princ (rtos (- no1 (CURVE-LENG (entlast))) 2 8));测试线长
  24.   (cmdla1)
  25. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-20 10:54:13 | 显示全部楼层
y= ((sin(s/r)) - (d/r))= 0
s= 弧長
d= 0.5*(兩點的距離)
r= 假設的半徑

for r= 0.01*d to 100.0*d step 0.1 do begin
   // test y1*y1 < 0.0

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

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

 楼主| 发表于 2005-9-20 12:51:07 | 显示全部楼层
sjgau02,按你的思路,数学模型写出错了,应该是:
   y=((sin(s/r/2)-(d/r));
让半径在半弦长的0.01至100倍间变化来求半径的这种算法
是不是太牵强了吧,而且步长为什么不0.01而是0.1呢?
“for r= 0.01*d to 100.0*d step 0.1 do begin
// test y1*y1 < 0.0

end; ”算法精度不够,“y1*y1 < 0.0”判断的意义何在,似是而非的
引用,根本不像二分法,别误导读者。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 17:07 , Processed in 0.191783 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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