乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 125|回复: 9

两点加半径画圆弧

[复制链接]

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-11-29 19:53:00 | 显示全部楼层 |阅读模式
请教老师:
C#如何写以下图片中两点加半径画圆弧

ev1yz4a20v0.gif

ev1yz4a20v0.gif

回复

使用道具 举报

7

主题

43

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2010-11-29 20:10:00 | 显示全部楼层

圆弧命令就可以做到了啊!
(defun c:hh()
  (setq a (getpoint "\n请指点圆弧的起点:"))
  (setq b (getpoint "\n请指定圆弧的端点:"))
  (setq c (getreal  "\n请输入你想要的半径:"))
  (command "arc" a "E" b "R" c "")
  (princ))
用LISP写的太简单了,不要笑话啊!
回复

使用道具 举报

29

主题

503

帖子

8

银币

中流砥柱

Rank: 25

铜币
619
发表于 2010-11-29 20:33:00 | 显示全部楼层
结果不唯一
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-11-29 21:43:00 | 显示全部楼层
谢谢楼上的,但是我想知道的是C#...
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-11-29 22:11:00 | 显示全部楼层
没有直接实现的函数,算法应该都知道的就不说了
同sailorcwx
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-11-30 12:34:00 | 显示全部楼层
狐哥
如何写这个函数,能否举个例子?
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-11-30 14:33:00 | 显示全部楼层
这个,最好你先自己试着写,有问题再来问
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-11-30 20:55:00 | 显示全部楼层

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

使用道具 举报

22

主题

99

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2010-12-2 15:41:00 | 显示全部楼层
你可以先指定PolyLine的起点,
再用Vector算出终点,
用PolyLine画的时候把bluge参数设置为1就可以了。
我之前画钢筋的时候是这么做的,希望对你会游泳。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-2 16:30:00 | 显示全部楼层
  1.         [CommandMethod("ca2dr")]
  2.         public static void CreateArc()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Database db = doc.Database;
  6.             Editor ed = doc.Editor;
  7.             var resPt1 = ed.GetPoint("\nInput First Point:");
  8.             if (resPt1.Status != PromptStatus.OK)
  9.                 return;
  10.             var pt1 = resPt1.Value;
  11.             var resPt2 = ed.GetPoint("\nInput Second Point:");
  12.             if (resPt2.Status != PromptStatus.OK)
  13.                 return;
  14.             var pt2 = resPt2.Value;
  15.             var resDbl = ed.GetDouble("Input R:");
  16.             if (resDbl.Status != PromptStatus.OK)
  17.                 return;
  18.             var r = resDbl.Value;
  19.             Point3d center;
  20.             if (pt1.DistanceTo(pt2) > r * 2)
  21.             {
  22.                 ed.WriteMessage("\n半径太小!");
  23.                 return;
  24.             }
  25.             else if (pt1.DistanceTo(pt2) == r * 2)
  26.             {
  27.                 center = (pt1 + pt2.GetAsVector()) / 2;
  28.             }
  29.             else
  30.             {
  31.                 CircularArc3d ca3d1 = new CircularArc3d(pt1, Vector3d.ZAxis, r);
  32.                 CircularArc3d ca3d2 = new CircularArc3d(pt2, Vector3d.ZAxis, r);
  33.                 CurveCurveIntersector3d cci3d = new CurveCurveIntersector3d(ca3d1, ca3d2, Vector3d.ZAxis);
  34.                 center = cci3d.GetIntersectionPoint(0);
  35.                 double ang = (pt2 - center).GetAngleTo(pt1 - center, -Vector3d.ZAxis);
  36.                 if(ang > Math.PI )
  37.                     center = cci3d.GetIntersectionPoint(1);
  38.             }
  39.             using (var tr = db.TransactionManager.StartTransaction())
  40.             {
  41.                 Arc arc =
  42.                     new Arc(
  43.                         center,
  44.                         r,
  45.                         (pt1 - center).AngleOnPlane(new Plane()),
  46.                         (pt2 - center).AngleOnPlane(new Plane()));
  47.                 var btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  48.                 btr.AppendEntity(arc);
  49.                 tr.AddNewlyCreatedDBObject(arc, true);
  50.                 tr.Commit();
  51.             }
  52.         }
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 17:39 , Processed in 0.473916 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表