chpmould 发表于 2010-11-29 19:53:29

两点加半径画圆弧

请教老师:
C#如何写以下图片中两点加半径画圆弧

你有种再说一遍 发表于 2024-8-18 17:58:53

浅予 发表于 2024-8-18 09:49
这样画出来是不是有两种情况,不知道圆形的位置

怎么不知道呢?还可以利用凸度反向求圆心...
https://www.cnblogs.com/JJBox/p/14300098.html#_label3_4_3_1
大部分的不知道都是学习不够深入啦

cjf160204 发表于 2024-6-29 14:45:12

MaKaiJin 发表于 2010-11-29 20:10
圆弧命令就可以做到了啊!
(defun c:hh()
(setq a (getpoint "\n请指点圆弧的起点:"))


优秀刚好用得到,感谢!

浅予 发表于 2024-8-18 09:49:10

这样画出来是不是有两种情况,不知道圆形的位置

MaKaiJin 发表于 2010-11-29 20:10:04

本帖最后由 MaKaiJin 于 2010-11-29 20:13 编辑

圆弧命令就可以做到了啊!
(defun c:hh()
(setq a (getpoint "\n请指点圆弧的起点:"))
(setq b (getpoint "\n请指定圆弧的端点:"))
(setq c (getreal"\n请输入你想要的半径:"))
(command "arc" a "E" b "R" c "")
(princ))

用LISP写的太简单了,不要笑话啊!

sailorcwx 发表于 2010-11-29 20:33:57

结果不唯一

chpmould 发表于 2010-11-29 21:43:59

谢谢楼上的,但是我想知道的是C#...

雪山飞狐_lzh 发表于 2010-11-29 22:11:01

没有直接实现的函数,算法应该都知道的就不说了
同sailorcwx

chpmould 发表于 2010-11-30 12:34:27

狐哥
如何写这个函数,能否举个例子?

雪山飞狐_lzh 发表于 2010-11-30 14:33:58

这个,最好你先自己试着写,有问题再来问

chpmould 发表于 2010-11-30 20:55:45

本帖最后由 chpmould 于 2010-11-30 21:14 编辑

我知道经过自己慢慢试着写过之后理解会更深,关键是我目前还不知到从那里入手,没有思路...

epwt 发表于 2010-12-2 15:41:30

你可以先指定PolyLine的起点,
再用Vector算出终点,
用PolyLine画的时候把bluge参数设置为1就可以了。
我之前画钢筋的时候是这么做的,希望对你会游泳。

雪山飞狐_lzh 发表于 2010-12-2 16:30:59

      
      public static void CreateArc()
      {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            var resPt1 = ed.GetPoint("\nInput First Point:");
            if (resPt1.Status != PromptStatus.OK)
                return;
            var pt1 = resPt1.Value;

            var resPt2 = ed.GetPoint("\nInput Second Point:");
            if (resPt2.Status != PromptStatus.OK)
                return;
            var pt2 = resPt2.Value;

            var resDbl = ed.GetDouble("Input R:");
            if (resDbl.Status != PromptStatus.OK)
                return;
            var r = resDbl.Value;

            Point3d center;
            if (pt1.DistanceTo(pt2) > r * 2)
            {
                ed.WriteMessage("\n半径太小!");
                return;
            }
            else if (pt1.DistanceTo(pt2) == r * 2)
            {
                center = (pt1 + pt2.GetAsVector()) / 2;
            }
            else
            {

                CircularArc3d ca3d1 = new CircularArc3d(pt1, Vector3d.ZAxis, r);
                CircularArc3d ca3d2 = new CircularArc3d(pt2, Vector3d.ZAxis, r);
                CurveCurveIntersector3d cci3d = new CurveCurveIntersector3d(ca3d1, ca3d2, Vector3d.ZAxis);
                center = cci3d.GetIntersectionPoint(0);
                double ang = (pt2 - center).GetAngleTo(pt1 - center, -Vector3d.ZAxis);
                if(ang > Math.PI )
                  center = cci3d.GetIntersectionPoint(1);
            }

            using (var tr = db.TransactionManager.StartTransaction())
            {

                Arc arc =
                  new Arc(
                        center,
                        r,
                        (pt1 - center).AngleOnPlane(new Plane()),
                        (pt2 - center).AngleOnPlane(new Plane()));
                var btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
                btr.AppendEntity(arc);
                tr.AddNewlyCreatedDBObject(arc, true);
                tr.Commit();
            }

      }
页: [1] 2
查看完整版本: 两点加半径画圆弧