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

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

Как отрисовать проекцию дуги ?

Ответ
Поиск в этой теме
Непрочитано 20.04.2023, 08:38 #1
Как отрисовать проекцию дуги ?
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 470

Всем привет!

Обычная 2D задача.

Имеем дугу, отрисованную в плоскости XY.
Для удобства будем считать, что её центр находится в точке 0,0

Нужно рассчитать точки концов её проекции на ось X.

(Потом, конечно, построить по ним линию, но это легко, оно и
обсуждения не стоит).

Когда дуга полностью находится НАД или ПОД осью X - всё просто.
Сложности возникают, когда дуга захватывает несколько квадрантов.

Конечно, через (cond … ) можно описать и посчитать все случаи, но:

а) Может быть, кто-то уже решал эту задачу и не нужно "изобретать
велосипед", есть готовая функция?
б) Может быть, есть более изящное решение, чем перебирать варианты
изображения дуги через (cond …)?
__________________
Счастливо, Алексей!
Просмотров: 924
 
Непрочитано 20.04.2023, 09:07
#2
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


и тебе не хворать)
эммм, дуга на плоскости XY, проекции её концов на ось X разве не будут (X начала дуги, 0), (X конца дуги, 0) или янтп?
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 20.04.2023, 09:20
#3
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Это частный случай, для "не очень загнутой дуги".

Если дуга охватывает четыре квадранта, то проекции
её концов вообще в одну точку угодить могут. :-)

А проекция всей дуги при этом будет "Радиус + кусочек".
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 20.04.2023, 09:27
#4
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


так тогда не концов, а граничных точек её проекции

----- добавлено через ~13 мин. -----
если концы дуги (один или оба) находятся в квадрантах III, IV, то есть углы начала и конца дуги >= pi и <= 2*pi, то найти для соответсвующих концов радиальные точки дуги по оси Х и из всех Х-ов для радиальных точек (если они есть) и концов дуги найти min и max.
__________________
K Lisp

Последний раз редактировалось koMon, 20.04.2023 в 09:46.
koMon вне форума  
 
Автор темы   Непрочитано 20.04.2023, 09:47
#5
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Да там полно вариантов... Всё, что у меня пока получается - это
наборка "частных случаев", обрабатываемых через (cond …)

Диапазон - от R+R до "почти точки", если короткая дуга лежит
на пересечении 2-го и 3-го квадрантов.

Я эту задачу и через (cond …) "допилю" конечно (благо кол-во
вариантов ограничено), но мне сам этот подход не нравится.

Хотелось бы решения "в общем виде".
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 20.04.2023, 09:57
1 | 1 #6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Возьми BoundingBox и не парься.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.04.2023, 10:05
#7
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Как вариант - да.

Если он умеет для 3D-дуги правильный 3D-прямоугольник
строить. Пробовать нужно.

Это я ведь лишь в "Теме" задачу упростил.
Остальное-то и сам сделаю/пересчитаю.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 20.04.2023, 10:14
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


BoundingBox возвращает 2 трехмерные точки в мировой системе координат, и вполне корректно (насколько я помню) работает и с трехмерными объектами.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.04.2023, 10:35
1 | #9
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


можно и попариться)

Код:
[Выделить все]
 
(defun arc_x_projection (arc_ename)
	(setq arc_object (vlax-ename->vla-object arc_ename)
		  arc_radial_point_1 (vlax-curve-getpointatparam arc_object pi)
		  arc_radial_point_2 (vlax-curve-getpointatparam arc_object 0)
		  arc_radial_point_3 (vlax-curve-getpointatparam arc_object (* 1.5 pi))
		  arc_start_point (vlax-get arc_object 'startpoint)
		  arc_end_point (vlax-get arc_object 'endpoint)
		  all_point_list (vl-remove nil (list arc_radial_point_1 
		  									  arc_radial_point_2 
											  arc_radial_point_3
											  arc_start_point 
											  arc_end_point
										)
						 )
		  x_min_arc_projection (apply 'min (mapcar 'car all_point_list))
		  x_max_arc_projection (apply 'max (mapcar 'car all_point_list))
		  y_min_arc_projection (apply 'min (mapcar 'cadr all_point_list))
	)
	(vla-put-color (vla-addline (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
										 	   (vlax-3d-point (trans (list x_min_arc_projection y_min_arc_projection) 0 1))
										 	   (vlax-3d-point (trans (list x_max_arc_projection y_min_arc_projection) 0 1))
				   )
				   1
	)
)
__________________
K Lisp

Последний раз редактировалось koMon, 20.04.2023 в 10:44.
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как отрисовать проекцию дуги ?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA узнать центр дуги в полилинии AnteC Программирование 3 02.02.2013 01:27
Програмка построения дуги по длине хорды и длине дуги b_anton Программирование 11 21.01.2011 06:45
Построение дуги по хорде и длине дуги. Verba AutoCAD 1 28.10.2009 13:29
Как получить реалистичную проекцию сложного тела? rontiy AutoCAD 9 03.02.2006 08:29
Дуги в ACAD 2k5 Iam AutoCAD 5 19.05.2005 23:32