找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1804|回复: 7

[ARX程序]:XD,AcDbArc里的角度问题?

[复制链接]
发表于 2002-9-19 14:33:06 | 显示全部楼层 |阅读模式

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

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

×
我想问在AcDbArc()里,startAngle和endAngle是以什么作为参考的?
我给了几个角度,但我看不出来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-19 14:39:20 | 显示全部楼层

Re: [ARX程序]:XD,AcDbArc里的角度问题?

最初由 funpig 发布
[B]我想问在AcDbArc()里,startAngle和endAngle是以什么作为参考的?
我给了几个角度,但我看不出来。 [/B]


前几天刚贴了帖子,讲了ARC起始角度的参考角的问题,你去看看下面的帖子:

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

使用道具 举报

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

使用道具 举报

发表于 2002-9-20 16:40:22 | 显示全部楼层
提供一个我做的求弧长的函数供参考。
const double PI = 3.1415926

double ArcLenth(const AcGePoint3d &Cen,double R,const AcGePoint3d &StartPoint,const AcGePoint3d &EndPoint,BOOL bPosDirec = 1 )const;

double ArcLenth(const AcGePoint3d &Cen,double R,const AcGePoint3d &StartPoint,const AcGePoint3d &EndPoint,BOOL bPosDirec)const
{
        const double MIN_ANGLE = (0.1*PI)/180;
        AcGeVector3d VStart = StartPoint - Cen;//从起始点到圆心的向量
        AcGeVector3d VEnd = EndPoint - Cen;//从终点到圆心的向量
        AcGeCircArc3d testArc(Cen,nrm,VStart,R,0,MIN_ANGLE);//构造从起始点逆时针转过MIN——ANGLE角度的弧,其中参考向量即为起始点到圆心的向量。
        AcGeCircArc3d FArc(StartPoint,testArc.endPoint(),EndPoint);//利用3点构造所需圆弧。
        return R*(bPosDirec?fabs(FArc.endAng() - FArc.startAng()):(2*PI - fabs(FArc.endAng() - FArc.startAng())));//利用endAng和startAng求出夹角从而返回弧长。当bPosDirec为正则返回从起始点逆时针转到终点的弧长,为负则返回顺时针时的弧长。

由此可见:refVec 可以是弧所在平面的任意向量(当然可以是起始点(终点)到圆心的向量),只要你能求出起试点到圆心向量与其夹角startAng和终点到圆心向量与其夹角endAng.
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-9-20 17:26:37 | 显示全部楼层
更正一下;
const double MIN_ANGLE = StartPoint.distanceTo(EndPoint)/R
这样可以求出任意的弧长。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-20 18:38:00 | 显示全部楼层
用角度判断和自己写公式复杂些,其实可以直接使用:

AcGeCurve3d::paramOf(...)

得到起始点和终止点的“参数”,这个对于曲线是唯一的,而且固定是逆时针顺序的。

而求曲线两点见长度(包括弧线),可以直接根据两点用:

AcGeCurve3d::length(...)得到,根据给的两个点的时针顺序得到不同的弧线长度。

ARX几何库给我们提供了所有的图形学算法,具体应用中,不用我们去考虑具体的算法公式了。使用几何库的一个好处是方便,另个好处是结果肯定正确。


  1. [FONT=courier new]
  2. double
  3. length(
  4.     double fromParam,
  5.     double toParam,

  6.     double tol = AcGeContext::gTol.equalPoint()) const;

  7. fromParam        Input first parameter value
  8. toParam        Input second parameter value
  9. tol        Input tolerance

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-20 18:41:20 | 显示全部楼层
大家记住一点的是,凡是AcGeCurve3d,2d曲线能构造的几何图形,所有的东西都可以从这些类里面得到,不用自己另外写算法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 69个

财富等级: 招财进宝

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 18:27 , Processed in 0.188215 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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