`中微子 发表于 2024-8-22 00:39:14

请教各位大佬,根据弧定距取点问题!

本帖最后由 `中微子 于 2024-8-22 01:16 编辑

如下图,已知弧上P1,P2,P3三点。如何取得PT1和PT2点(PT1,PT2距离可以修改)?


有没有一个像polar的函数可以设置弧线的?

感谢指教!


附件是AI写的,输出二个数不知道是啥,我要的是N个弧上坐标点!

xtjd 发表于 2024-8-22 15:43:47






你有种再说一遍 发表于 2024-8-22 07:31:59

本帖最后由 你有种再说一遍 于 2024-8-22 07:37 编辑

弧长=半径*圆心角

通过三点求圆心,圆心得到半径,
弧长500/半径=PT1的圆心角,
接着它就是直角三角形,就能换算成坐标.

其中弧长假定是x轴出发,要加上到p1的夹角

https://www.cnblogs.com/JJBox/p/14300098.html#_label3_4_3_1

咏郡 发表于 2024-8-22 08:18:02

返回曲线上距开始点为指定距离的点(在 WCS 中)

(vlax-curve-getPointAtDist curve-objdist)
参数

curve-obj

要测量的 VLA 对象。

dist

曲线上从开始点到指定点位置的距离。

返回值

如果成功则返回表示曲线上一点的三维点表,否则返回 nil。

示例

假定 splineObj 指向 vlax-curve-getDistAtParam 样例中的样条曲线。确定与样条曲线开始点距离为 1.0 的点:

_$ (vlax-curve-getPointAtDist splineObj 1.0)
(2.24236 2.99005 0.0)

帝都划水王 发表于 2024-8-22 09:20:46

你有种再说一遍 发表于 2024-8-22 07:31
弧长=半径*圆心角

通过三点求圆心,圆心得到半径,


这种通过数学换算的特别适合我这种小白自己想办法写出来,难度不高,成就感拉满

`中微子 发表于 2024-8-22 10:49:02

你有种再说一遍 发表于 2024-8-22 07:31
弧长=半径*圆心角

通过三点求圆心,圆心得到半径,


非常感谢!看了大神的C语言不会翻译成LISP噢!


/// http://bbs.xdcad.net/thread-722387-1-1.html/// <summary>/// 凸度求圆心/// </summary>/// <param name="arc1">圆弧头点</param>/// <param name="arc3">圆弧尾点</param>/// <param name="bulge">凸度</param>/// <returns>圆心</returns>public static Point2d GetArcBulgeCenter(Point2d arc1, Point2d arc3, double bulge){    if (bulge == 0)      throw new ArgumentNullException("凸度为0,此线是平的");    var x1 = arc1.X;    var y1 = arc1.Y;    var x2 = arc3.X;    var y2 = arc3.Y;    var b = (1 / bulge - bulge) / 2;    var x = (x1 + x2 - b * (y2 - y1)) / 2;    var y = (y1 + y2 + b * (x2 - x1)) / 2;    return new Point2d(x, y);}
有二个问题,
如何通过圆弧上三点计算凸度bulge
还有是这一句,var b = (1 / bulge - bulge) / 2; 怎么翻译成LISP


谢谢!

`中微子 发表于 2024-8-22 10:59:26

咏郡 发表于 2024-8-22 08:18
返回曲线上距开始点为指定距离的点(在 WCS 中)

(vlax-curve-getPointAtDist curve-objdist)


谢谢!这个函数很好,缺点是要把这个弧画出来.可以成为备用方案.

`中微子 发表于 2024-8-22 17:11:08

xtjd 发表于 2024-8-22 15:43


非常好!多谢!!

咏郡 发表于 2024-8-22 19:58:57

`中微子 发表于 2024-8-22 10:59
谢谢!这个函数很好,缺点是要把这个弧画出来.可以成为备用方案.

画出来 在删掉{:1_1:}

xyp1964 发表于 2024-8-22 20:53:20

(defun abc (p1 p2 p3 l1 l2 / s1 ll p4 p5)
"根据3点圆弧定距取点"
;; (setq ptn(abc (getpoint)(getpoint)(getpoint) 200 1000))
(command "arc""non" p1 "non" p2 "non" p3)
(setq s1 (entlast)
        ll (vla-get-ArcLength (vlax-ename->vla-object s1))
)
(if (<= l1 (+ l1 l2) ll)
    (setq p4 (vlax-curve-getPointAtDist s1 l1)
          p5 (vlax-curve-getPointAtDist s1 (+ l1 l2))
    )
)
(entdel s1)
(if (and p4 p5)(list p4 p5))
)
页: [1] 2
查看完整版本: 请教各位大佬,根据弧定距取点问题!