明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2438|回复: 12

请教判断闭合PLINE点的两个算法问题

  [复制链接]
发表于 2004-11-28 09:24:00 | 显示全部楼层 |阅读模式
问题1:


一条闭合PLINE线,怎么能判断出线是以顺时针方向走的?


问题2:


怎样能判断出一条闭合PLINE线的左上角?


以上问题用于测绘地藉图的宗地线
发表于 2004-11-28 10:51:00 | 显示全部楼层

回复

贴出示意图来说明你的问题,因为PLINE可以是很复杂的.
发表于 2004-11-28 10:59:00 | 显示全部楼层
这是判断顺逆时针的程序第二个问题左上角的概念不够明确
  1. (vl-load-com)
  2. (defun GetCen(pl / pt1 pt2)
  3.    (vla-getboundingbox (vlax-ename->vla-object pl) 'pt1 'pt2)
  4.    (setq pt1 (vlax-safearray->list pt1))
  5.    (setq pt2 (vlax-safearray->list pt2))
  6.    (list (/ (+ (car pt1) (car pt2)) 2.0)
  7.   (/ (+ (cadr pt1) (cadr pt2)) 2.0)
  8.    )
  9. )
  10. (defun GEO_CCW (p0 p1 p2 p3 / ang1 ang2 ang3)
  11.    (setq ang1 (angle p0 p1))
  12.    (setq ang2 (angle p0 p2))
  13.    (setq ang1 (- ang2 ang1))
  14.    (if (> (abs ang1) pi)
  15.        (setq ang1 (+ (* -2 pi (/ ang1 (abs ang1))) ang1))
  16.    )
  17.    (setq ang3 (angle p0 p3))
  18.    (setq ang2 (- ang3 ang2))
  19.    (if (> (abs ang2) pi)
  20.        (setq ang2 (+ (* -2 pi (/ ang2 (abs ang2))) ang2))
  21.    )
  22.    (if (> (* ang1 ang2) 0)
  23.        (/ ang1 (abs ang1))
  24.        (cond
  25.            ((> (abs ang1) (abs ang2))
  26.              (if (= ang2 0)
  27.    0
  28.    (/ ang2 (abs ang2)))
  29.              )
  30.            ((<= (abs ang1) (abs ang2))
  31.              (if (= ang1 0)
  32.    0
  33.    (/ ang1 (abs ang1)))
  34.            )
  35.        )
  36.    )
  37. );DEFUN
  38. (defun c:PlineCCW (/ pline step param nParam pt pt1 pt2 ptc i mp CCWLST)
  39.    (setq pline (car (entsel "Select lwpline")))
  40.    (setq step 100)
  41.    (setq mp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
  42.    (setq ptc (getcen pline))
  43.    (setq param (/ (vlax-curve-getDistAtParam pline (vlax-curve-getEndParam pline)) step))
  44.    (setq i 0)
  45.    (repeat (1- step)
  46.        (setq nParam (* i param))
  47.        (setq pt (vlax-curve-getPointAtdist pline nParam))
  48.        (setq pt1 (vlax-curve-getPointAtdist pline (+ (* (/ 0.5 step) param) nParam)))
  49.        (setq pt2 (vlax-curve-getPointAtdist pline (+ (* (/ 1.0 step) param) nParam)))
  50.        (setq CCWLST (append CCWLST (list (GEO_CCW ptc pt pt1 pt2))))
  51.        (setq i (1+ i))
  52.    )
  53.    (if (> (length (vl-remove 1.0 CCWLST)) (length (vl-remove -1.0 CCWLST)))
  54.        (progn           
  55.            (princ "\nPline is clockwise")
  56.        )
  57.        (princ "\nPline is counterclockwise")
  58.    )
  59.    (princ)
  60. ) ;end defun
 楼主| 发表于 2004-11-28 21:34:00 | 显示全部楼层
非常感谢!


左上角点就是PLINE线的Y坐标比较大,X坐标比较小的点


我也不知道怎么说才算,反正大概就是这意思,下图的圆就左上角点

本帖子中包含更多资源

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

x
发表于 2004-11-29 09:05:00 | 显示全部楼层
这样子哪个算左上角?


本帖子中包含更多资源

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

x
 楼主| 发表于 2004-11-29 23:19:00 | 显示全部楼层
上面那个点
 楼主| 发表于 2004-11-30 19:30:00 | 显示全部楼层
meflying 可以判断出来吗?
发表于 2004-11-30 20:08:00 | 显示全部楼层
判断左上角点的方法这样行不:


先求出线的范围框,用(vla-getboundingbox)


然后用框的左上角点和右下角点的直线同多义线求交点,


然后求交点表中最左的那点与多义线中各节点距离最近的点就算了


呵呵,还是麻烦哦!
发表于 2004-12-1 02:41:00 | 显示全部楼层
X 最小 Y 最大的点
发表于 2004-12-1 08:24:00 | 显示全部楼层
Ea发表于2004-12-1 2:41:00X 最小 Y 最大的点

这两者并不一定是一个点。。。 判断左上点这个问题从概念上还没解决这个问题,一个图画出来,如果让两个人来判断左上点,可能结果都不一样,这种无法确定的东西是无法做的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-30 04:24 , Processed in 0.205650 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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