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

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

Как выстроить их по часовой стрелке?

Ответ
Поиск в этой теме
Непрочитано 20.01.2011, 11:28 #1
Как выстроить их по часовой стрелке?
Mozgunov
 
Начинающий проектировщик
 
Санкт-Петербург
Регистрация: 07.02.2008
Сообщений: 443

Ребят есть такой вопрос. Имеется 4 точки pt1, pt2, pt3, pt4. Как выстроить их по часовой стрелке? Середина циферблата это пересечение между линиями соединяющие точки через одну. (Autolisp). Спасибо!
Просмотров: 3794
 
Непрочитано 20.01.2011, 11:38
#2
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Извините, непонятно. Каждая точка имеет свои координаты. Если их как-то
начать "выстраивать", т.е. перемещать, я так понимаю это будут уже другие точки (с другими координатами)?
E-degtyarev вне форума  
 
Автор темы   Непрочитано 20.01.2011, 11:55
#3
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Менять координаты не нужно. Нужно поменять местами имена точек с этими координатами. На рис.1 , рис.2 точки расположены по часовой стрелке. На рисунке 3, 4 беспорядочно. Нужна функция которая бы преобразовала беспорядочное расположение точек к виду "точки по часовой стрелке". Единственное условие это чтобы точка pt2 оставалась на своём первоначальном месте.
Миниатюры
Нажмите на изображение для увеличения
Название: 123.jpg
Просмотров: 123
Размер:	27.5 Кб
ID:	52010  
Mozgunov вне форума  
 
Непрочитано 20.01.2011, 12:13
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


А что нужно-то? Совет по алгоритму такой программы? Готовую программу? С чего начать?
Do$ вне форума  
 
Автор темы   Непрочитано 20.01.2011, 12:17
#5
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Совета по алгоритму я думаю хватит.
Mozgunov вне форума  
 
Непрочитано 20.01.2011, 12:21
#6
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


проверяй, с какой стороны от линии pt2 pt4 находятся pt1 pt3. Во первых, они должны быть с разных сторон, во вторых pt1 должна быть справа.
Проверки, рекомендую делать с помощью углов...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 20.01.2011, 12:41
#7
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Mozgunov Посмотреть сообщение
Совета по алгоритму я думаю хватит.
Извини, была готовая
Код:
[Выделить все]
(defun sort_by_clok (point
		     centr
		     start_angle
		     dir
		     /
		    )
  ;|
point - список точек
centr - центр циферблата
start_angle - начальный угол отсчёта в радианах
dir - направление > - по часовой < - против часовой
  |;
  (vl-sort
    point
    (function
      (lambda (e1 e2)
	(setq e1 (list (car e1)
		       (cadr e1)
		 )
	      e2 (list (car e2)
		       (cadr e2)
		 )
	)
	(setq angle_1 (- (angle	centr
				e1
			 )
			 start_angle
		      )
	      angle_1 (if
			(minusp angle_1)
			 (+ angle_1 pi pi)
			 angle_1
		      )
	      angle_2 (- (angle	centr
				e2
			 )
			 start_angle
		      )
	      angle_2 (if
			(minusp angle_2)
			 (+ angle_2 pi pi)
			 angle_2
		      )
	)
	(dir angle_1 angle_2)
      )
    )
  )
)
центр сам найдёшь.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 20.01.2011, 14:47
#8
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Mozgunov Посмотреть сообщение
Ребят есть такой вопрос. Имеется 4 точки pt1, pt2, pt3, pt4. Как выстроить их по часовой стрелке? Середина циферблата это пересечение между линиями соединяющие точки через одну. (Autolisp). Спасибо!
Нашел в загашнике
Код:
[Выделить все]
try.lsp
((lambda()
   (setq pts nil)
(while (setq p (getpoint "\nPick point (or push Enter to Exit loop) : >>: "))
(setq pts (cons p pts)))
(setq pts (mapcar '(lambda(x)(trans x 1 0))(reverse pts)))

(setq x1 (caar (vl-sort pts '(lambda (a b) (< (car a) (car b)))))
      y1 (cadar (vl-sort pts '(lambda (a b) (< (cadr a) (cadr b)))))
      x2 (caar (vl-sort pts '(lambda (a b) (>(car a) (car b)))))
      y2 (cadar (vl-sort pts '(lambda (a b) (> (cadr a) (cadr b)))))
      cp (mapcar '(lambda(a b)(* (+ a b) 0.5)) (list x1 y1)(list x2 y2)))

(setq pts (vl-sort pts '(lambda (a b) (< (angle cp a) (angle cp b)))))
(setq i 1)
(foreach p pts
  (entmake
    (list (cons 0 "TEXT")
                  (cons 10  p)
                  (cons 40 200)
                  (cons 1  (itoa i))))
  (setq i (1+ i)))
   (princ)
   )
  )
Олег (jr.) вне форума  
 
Непрочитано 20.01.2011, 15:03
#9
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Цитата:
Проверки, рекомендую делать с помощью углов...
ИМХО. Углы нужно всегда избегать использовать, тригонометрия - лишняя и медленная возня. Вполне достаточно получить уравнение прямой вида ax+by+c=0 и подставив в него координаты проверяемых точек по знаку определить слева или справа они лежат.

Для решения я бы сортировал список точек чтобы Z составляющая векторных произведений векторов образованных 3мя соседними точками была одного знака, в зависимости по или против часовой нужно получить результат
zamtmn вне форума  
 
Непрочитано 20.01.2011, 17:30
#10
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от zamtmn Посмотреть сообщение
ИМХО. Углы нужно всегда избегать использовать, тригонометрия - лишняя и медленная возня. Вполне достаточно получить уравнение прямой вида ax+by+c=0 и подставив в него координаты проверяемых точек по знаку определить слева или справа они лежат.

Для решения я бы сортировал список точек чтобы Z составляющая векторных произведений векторов образованных 3мя соседними точками была одного знака, в зависимости по или против часовой нужно получить результат
Это для меня сложно- только 8 классов еле одолел, не считая на второй год
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как выстроить их по часовой стрелке?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как построить дугу по часовой стрелке? Aqualung AutoCAD 8 26.08.2009 15:21
Ищу "Рекомендации по определению стоимости часовой эксплуатации строительных машин и механизмов" Департ. капитальн. строит. и транспорта ОАО Газпром Oleg324 Поиск литературы, чертежей, моделей и прочих материалов 0 12.03.2009 12:33
Эвакуационная лестница. Направление - по часовой или против? casemsot Архитектура 22 06.11.2007 15:32
ADT: выстроить стену по сплайну Clod AutoCAD 12 07.09.2007 15:36
Как узнать полилиния, построена по часов стрелке или против Paradox Программирование 2 01.02.2005 15:53