找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1898|回复: 8

[求助]:求垂线

[复制链接]
发表于 2004-3-12 22:24:08 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-3-12 23:30:25 | 显示全部楼层

Re: [求助]:求垂线

最初由 xux4618 发布
[B]怎样才能得到过多段线线一点并且与该多段线垂直的线 [/B]


1、首先用:
[php]
virtual Acad::ErrorStatus

getFirstDeriv(

const AcGePoint3d& unnamed,

AcGeVector3d& firstDeriv) const;

unnamed Input point on curve at which to find the first derivative

firstDeriv Returns the first derivative of the curve at point


This function evaluates the first derivative of the curve at point and sets

firstDeriv to the result, in both this class and derived classes. Both point

and firstDeriv are in WCS coordinates in derived classes.


Returns Acad::eOk if successful. If point is not on the curve, then

Acad::eInvalidInput is returned. Other ErrorStatus return values are up to

the implementor.


For implementation, the AcGe classes may provide some of the necessary

functionality to make the job easier.

In the default implementation, the function returns Acad::eNotImplemented


[/php]

得到曲线在该点p1的一阶导数(切线矢量)vec1

2、由vec1使用:
[php]
AcGeVector3d::perpVector Function AcGeVector3d

perpVector() const;

Returns a vector orthogonal to this vector. The choice of the orthogonal

vector is determined by the function

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

使用道具 举报

发表于 2004-3-12 23:37:29 | 显示全部楼层
还是XD厉害,过去我求直线垂线都是用解释几何来算出来的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-3-13 00:03:24 | 显示全部楼层
最初由 yusongrong 发布
[B]还是XD厉害,过去我求直线垂线都是用解释几何来算出来的。 [/B]


有了AcGe几何库,图形学几何算法可以不用我们自己去写了,都提供了。直线的垂线自己还好写出来,对于曲线如ARC,SPLINE等等就不容易了。

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

使用道具 举报

 楼主| 发表于 2004-3-13 00:45:25 | 显示全部楼层
多些!请问我若求通过多段线上一点求距离该多段线一定距离的点的坐标,该如何做呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-3-13 05:29:56 | 显示全部楼层
最初由 xux4618 发布
[B]多些!请问我若求通过多段线上一点求距离该多段线一定距离的点的坐标,该如何做呢? [/B]


只给距离,参数不够,笛卡儿坐标系应该给出X方向偏移和Y方向偏移,极坐标系给出距离和角度。

比如要求距离点pt,相对位移X=100,Y=200的点p2的坐标,可以:

AcGePoint3d p2;
AcGeVect3d vec(100,100,0);
p2=p1+vec;

就是AcGePoint3d对象和向量的加法。

如果用极坐标,给距离和角度求另一点,可以用全局函数

[php]
acutPolar Global Function void

acutPolar(

const ads_point pt,

ads_real angle,

ads_real dist,

ads_point ptres);

pt The initial three-dimensional reference point

angle The angle of the resulting point from the initial point

dist The distance of the resulting point from the initial point

ptres The resulting three-dimensional point

Finds a point by means of polar coordinates.

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

使用道具 举报

 楼主| 发表于 2004-5-31 01:38:15 | 显示全部楼层
我希望求出过多段线上一点位于多段线左方1m处的点,该如何求?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2004-5-31 02:38:01 | 显示全部楼层
最初由 xux4618 发布
[B]我希望求出过多段线上一点位于多段线左方1m处的点,该如何求? [/B]


既然叫“左右”,那么就有个方向才能唯一,去的时候是左,回来时候是右:)

我们就以含有该点的多线“段”的起点和终点来确定方向吧,从“始点”-》“终点”的左侧。

[php]
设:
AcDbPolyline *pLw;  //为已打开的PL对象指针。
AcGePoint3d mPt; //在PL上的点

unsign int numVerts=pLw->numVerts(); //获得顶点数

for (int i=0;i<numVerts;i++)
{
     if (pLw->onSegAt(i,mPt,param))  //判断点是否在该索引开始的段上
     {
         index=i;
         break;
     }
}
AcGeLineSeg3d mL;
pLw->getLineSegAt(index,mL);  //获得从该索引开始的“段”,假设你的段是LINE,如果是弧,你要修改下代码。

AcGeVector3d axis=pLw->normal();  //得到旋转轴
AcGeVector3d mVec=mL.direction();  //该段的方向单位向量
AcGeVector3d mRotVec=mVec.rotateBy(PI/2,axis); //右手规则旋转90度,左侧。

mRotVec*=1000;   //1m,你要的距离,根据单位,你自己定是1000还是1。

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 18:48 , Processed in 0.189586 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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