Как определить, что замкнутая полилиния является прямоугольником?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как определить, что замкнутая полилиния является прямоугольником?

Как определить, что замкнутая полилиния является прямоугольником?

Ответ
Поиск в этой теме
Непрочитано 18.05.2013, 17:23 #1
Как определить, что замкнутая полилиния является прямоугольником?
annt
 
программист
 
Москва
Регистрация: 24.06.2008
Сообщений: 49

1) Полилиния замкнутая.
2) Надо проверить что это прямоугольник (4 стороны, углы прямые).
3) нужен код на LISP.
Спасибо.

Последний раз редактировалось annt, 18.05.2013 в 20:34.
Просмотров: 3268
 
Непрочитано 18.05.2013, 18:33
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,626


Нарисуй на одной стороне новый прямоугольник и сравни.
Profan вне форума  
 
Непрочитано 18.05.2013, 19:33
#3
KennyMckormik


 
Регистрация: 30.08.2009
Сообщений: 189


прямоугольник, как мне кажется, должен быть с прямыми углами: измерь один угол - вот и узнаешь

ЗЫ: как координаты трех вершин, любые три будут смежными, взять - посмотри по форуму, как из координат получить угол между векторами - в математике
__________________
Timeo Danaos et dona ferentes :eek:
KennyMckormik вне форума  
 
Непрочитано 18.05.2013, 21:16
1 | #4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


annt,
ОНО?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 18.05.2013, 23:14
#5
annt

программист
 
Регистрация: 24.06.2008
Москва
Сообщений: 49


Спасибо
annt вне форума  
 
Непрочитано 19.08.2013, 12:30
#6
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Всем привет.
Выбрал эту тему для разминки мозга
Код:
[Выделить все]
 
;; Возвращаемое значение T если замкнутая полилиния - прямоугольник , в остальных случаях nil
(defun es_rectbool (/ obj_pline)
  (if
    (and
      (setq obj_pline (ssget "_:E:S" '((0 . "lwpolyline") (90 . 4))))
      (= (logand (cdr (assoc 70 (entget (ssname obj_pline 0)))) 1)
	 1
      )
    )
     (zerop
       (apply '-
	      (mapcar
		'(lambda (x)
		   (distance (car x) (cadr x))
		 )
		(apply 'mapcar
		       (cons 'list
			     (es_splitlist
			       (es_splitlist
				 (vlax-safearray->list
				   (vlax-variant-value
				     (vla-get-coordinates
				       (vlax-ename->vla-object
					 (ssname obj_pline 0)
				       )
				     )
				   )
				 )
				 2
			       )
			       2
			     )
		       )
		)
	      )
       )
     )
  )
)
Вспомогательная функция для разбиения списка

Код:
[Выделить все]
 
;аргументы 
;lst- список на входе
;n - количество элементов в подсписках
(defun es_splitlist (lst n)
  (if
    (and
      (not x)
      (setq n (fix n))
    )
     (setq spisok nil)
  )


  (if lst
    (cond
      (
       (and
	 (setq spisok (cons (car lst) spisok))
	 (/= (length lst) 1)
	 (< (length spisok) n)
	 (setq x (length spisok))
       )

       (es_splitlist (cdr lst) n)

      )

      (
       (or
	 (and
	   (= (length spisok) n)
	   (not (setq x nil))
	 )
	 (and
	   (= (length lst) 1)
	   (not (setq x nil))
	 )
       )

       (cons (reverse spisok) (es_splitlist (cdr lst) n))
      )
    )
  )
)
Эдуард вне форума  
 
Непрочитано 15.10.2014, 12:49
#7
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Эдуард, спасибо за код. Пригодился. Попробовал использовать его в теме Подобие прямоугольников по X, Y. Но у автора темы в файле, приложенном к посту #14, некоторые углы имеют значения 89.999999 градусов, поэтому от проверки на прямоугольность там пришлось отказаться.
Я потестировал код поглубже, результаты тестирования отразил в приложенном файле. Все вроде хорошо, но не дает покоя, почему не определяет прямоугольником образец №6? С №7 понятно, там углы не 90 градусов. Но №6-то построен с применением привязки и полярного и объектного отслеживания, углы при максимальной точности отображения показывают точно 90 градусов, ан нет - не прямоугольник! Может, точность отслеживания не абсолютна? И разнится где-то на еще большей точности отображения, коя в Автокаде на доступна? В общем, я подумал, может, стоит добавить в Ваш код допуск?
Вложения
Тип файла: dwg
DWG 2010
Чертеж1.dwg (57.0 Кб, 567 просмотров)
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как определить, что замкнутая полилиния является прямоугольником?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Содержание раздела ПЗУ (генплан) в ПД Tyhig Прочее. Архитектура и строительство 45 10.12.2015 11:09
Авиация: история, техника, экономика, инфраструктура. T-Yoke Разное 5114 05.01.2015 15:55