RevitAPI:关于Curve.Distance(XYZ)方法
来源:互联网 发布:淘宝美工专业术语 编辑:程序博客网 时间:2024/06/05 17:29
今天有客户问道Line.Distance(XYZ)方法有问题,返回的点到直线的距离不正确。
例如下面的图中,点到直线的距离应该是10,但是结果返回的却是14.142135623731
他的代码是这样:
var p1 = new XYZ(0, 0, 0);var p2 = new XYZ(10, 0, 0);var p3 = new XYZ(20, 10, 0);Line line = Line.CreateBound(p1, p2);StringBuilder sb = new StringBuilder();sb.AppendLine("p3 to Line: " + line.Distance(p3));TaskDialog.Show("distance", sb.ToString());
确实运行的结果是:
p3 to Line: 14.142135623731
为什么不是10呢?
答案:点到直线的距离确实是10,但是这里的Line是Bound Line,也就是线段,而这里Distance()返回的距离是点到线段的距离,也就是14.14,如下图所示:
要得到正确的结果我们可以调用Line.MakeUnbound(),先把线变成Unbound,再求结果,代码如下:
var p1 = new XYZ(0, 0, 0); var p2 = new XYZ(10, 0, 0); var p3 = new XYZ(20, 10, 0); Line line = Line.CreateBound(p1, p2); line.MakeUnbound(); StringBuilder sb = new StringBuilder(); sb.AppendLine("p3 to Line: " + line.Distance(p3)); TaskDialog.Show("distance", sb.ToString());
如此就能返回正确的结果了。
0 0
- RevitAPI:关于Curve.Distance(XYZ)方法
- RevitAPI: 关于一些Exception
- RevitAPI: Revit中求两条直线的夹角XYZ.AngleTo
- R-D Curve绘制方法
- Curve
- RevitAPI之关于删除元素后
- XYZ
- xyz
- xyz
- XYZ
- Finding a point on a Bezier curve when given the distance from the start point
- RevitAPI之关于Room、Area、Tag【比目鱼原创】
- RevitAPI之TransactionGroup和Assimilate方法【比目鱼原创】
- RevitAPI之创建房间方法的介绍【比目鱼原创】
- BlackBerry 8900 Curve 免费解锁刷中文方法
- 贝塞尔曲线 (Bézier curve) 理论及绘制方法
- 关于 new String("xyz")创建几个对象的理解
- 关于 new String("xyz")创建几个对象的理解
- 提高写代码的能力(转载)
- Linux负载均衡软件LVS之二(安装篇)
- 颜色空间
- Could not find default endpoint element that references contract 'wcfXXXXXXXXXXX' in the ServiceMode
- jsp自定义标签开发
- RevitAPI:关于Curve.Distance(XYZ)方法
- 内存堆和栈的区别
- C# WinForm按钮简单美化
- Linux 磁盘挂载和mount共享
- .net字符串操作系列函数
- 第十四周项目一之折腾二维数组
- oracle 删除存储及调用存储的命令
- 任务栈和返回堆栈
- 第十四周oj平台(1):求矩阵对角线元素之和