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

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

Определение трехмерной длины по двумерной. LISP

Ответ
Поиск в этой теме
Непрочитано 17.12.2012, 14:07 #1
Определение трехмерной длины по двумерной. LISP
G-RAV
 
Геодезист
 
г.Новосибирск
Регистрация: 16.08.2009
Сообщений: 86

Подскажите спопсоб определения длины на 3d полилинии по горизонтальному проложению (двумерной длине).
Сам дошел до того, что можно определить общую длинну 3D сегмента разделить ее на длину 2D этого же сегмента, и у множать на эту величину каждое отложенное по этому сегменту 2d расстояние, но может есть способ попроще?
Полученные расстояния необходимы мне для функции vlax-curve-getPointAtDist
Просмотров: 2253
 
Непрочитано 17.12.2012, 15:06
#2
Олег (jr.)

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


См. св-во Delta:
Код:
[Выделить все]
(alert (strcat "Horizontal distance is: " (rtos (car (vlax-get  line_obj 'delta))2 6)))
Олег (jr.) вне форума  
 
Непрочитано 17.12.2012, 15:38
#3
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


А можно подробнее о этом свойстве?
gomer вне форума  
 
Автор темы   Непрочитано 17.12.2012, 15:43
#4
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
См. св-во Delta:
Код:
[Выделить все]
(alert (strcat "Horizontal distance is: " (rtos (car (vlax-get  line_obj 'delta))2 6)))
это ж для отрезков? и в предложенном варианте выдает dx?
G-RAV вне форума  
 
Непрочитано 17.12.2012, 18:46
#5
Disney

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


G-RAV, а практическое применение? Поделить 3D полилини, на равный 2D шаг?
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 17.12.2012, 19:17
#6
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


В общем... У меня получилось как то так... (без обработчиков ошибок пока)

Код:
[Выделить все]
 (DEFUN PROF_NEXT (DIST Start_piket ROAD  /   COORDINATES_PIKET
					     PARAMTR_POINT 
					     Proizvodn
					     ANGEL_SEGMENT
					     current_2D_DIST
		  				First_DIST
			)
  
(setq	nn 0
	First_DIST (* DIST(1+(fix(/ Start_piket DIST))))
	2D_DIST_SUMMA 0	
	current_2D_DIST (- First_DIST Start_piket)
	Catalogue_pickets (list(list nn Start_piket (vlax-curve-getStartPoint ROAD) 0 )	)
)

(WHILE (/= (vlax-curve-getpointatparam ROAD (1+ nn)) nil)
 
(setq 	2D_DIST_SEGMENT 	(distance (list (car (vlax-curve-getpointatparam ROAD nn))(cadr (vlax-curve-getpointatparam ROAD nn))) (vlax-curve-getpointatparam ROAD (1+ nn))))
(if	(/= 2D_DIST_SEGMENT 0.0) (progn
(setq 	PARAMTR_POINT 		(+ nn ( /(- current_2D_DIST 2D_DIST_SUMMA) 2D_DIST_SEGMENT  ) )
)
  
(WHILE (< PARAMTR_POINT (1+ nn))

  
(setq 	COORDINATES_PIKET 	(vlax-curve-getpointatparam ROAD PARAMTR_POINT )
	PROIZVODN 		(vlax-curve-getFirstDeriv ROAD PARAMTR_POINT )
	ANGEL_SEGMENT 		(angle '(0 0 0) Proizvodn) 
 	Catalogue_pickets 	(cons(list PARAMTR_POINT (+ Start_piket current_2D_DIST) Coordinates_piket ANGEL_SEGMENT )Catalogue_pickets)
  	current_2D_DIST		(+ current_2D_DIST DIST)
	PARAMTR_POINT 		(+(/ (- current_2D_DIST 2D_DIST_SUMMA)  2D_DIST_SEGMENT ) nn)			  
      )
);WHILE
  
(setq 	nn 			(+ 1 nn)	
  	COORDINATES_PIKET 	(vlax-curve-getpointatparam ROAD nn)
	ANGEL_SEGMENT 		0
	2D_DIST_SUMMA 		(+ 2D_DIST_SUMMA 2D_DIST_SEGMENT)
	Catalogue_pickets 	(cons(list nn (+ Start_piket 2D_DIST_SUMMA) COORDINATES_PIKET ANGEL_SEGMENT )Catalogue_pickets)
		)
)
(setq 	nn  (+ 1 nn))
  )
  )

(setq Catalogue_pickets (reverse Catalogue_pickets))  

)
Замечания и поправки очень даже принимаются... Может получится сделать функцию менее громоздкой...

Последний раз редактировалось G-RAV, 22.12.2012 в 18:36. Причина: Добавил условие на повторяющиеся вершины
G-RAV вне форума  
 
Непрочитано 18.12.2012, 12:36
#7
Disney

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


Цитата:
Сообщение от G-RAV Посмотреть сообщение
Может получится сделать функцию менее громоздкой...
Конечно может, только если ты объяснишь, что на входе и что нужно получить на выходе, а то ни фига не весело сидеть и гадать, а чего же это у тебя там получается. И самое главное, зачем всё это? а то может оказаться, что решать её надо совсем не так и в другом месте.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 18.12.2012, 12:50
#8
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


На входе: 1. Интервал (INT), 2. Начальный пикет (REAL), 3. (vlax-ename->vla-object (car (entsel)))

На выходе: Список
(параметр текущий_пикет (координаты) угол)

думал наименование самих переменных говорит само за себя...

*** нашел косЯк - при переходе на следующий сегмент, использует предидущий коофициент... блинн

Последний раз редактировалось G-RAV, 18.12.2012 в 13:22.
G-RAV вне форума  
 
Непрочитано 18.12.2012, 16:41
#9
Disney

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


Цитата:
Сообщение от G-RAV Посмотреть сообщение
2. Начальный пикет (REAL)
Что это такое "начальный пикет"? начальный номер, начальной вершины кривой, который будет через заданный интервал увеличиваться на единицу?
Цитата:
Сообщение от G-RAV Посмотреть сообщение
3. (vlax-ename->vla-object (car (entsel)))
По твоей теории, это обязательно должна быть только 3D полилиния, и ни чего иного?
Один фиг не понял, не смотря на то что я сам вроде как геодезист
В любом случаи, проще создать 2D копию, 3D кривой (если исходную "плющить" нельзя), и уже с 2D "курва-гетать" всё что угодно.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 18.12.2012, 17:12
#10
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Цитата:
Сообщение от Disney Посмотреть сообщение
Что это такое "начальный пикет"? начальный номер, начальной вершины кривой, который будет через заданный интервал увеличиваться на единицу?
Начальный пикет - это начальный пикет. Он может быть 0.0, т.е. ПК0, а может быть, например, 1256.43, т.е ПК12+56.43 и увеличиваться он будет сначала до целого "шага". В моем примере, при шаге 100, первый шаг составит 43.57, последующие шаги по 100
Цитата:
Сообщение от Disney Посмотреть сообщение
По твоей теории, это обязательно должна быть только 3D полилиния, и ни чего иного?
именно... может еще быть фигура (C3D) или характерная линия (C3D) (что имеет 3d геометрию)
Цитата:
Сообщение от Disney Посмотреть сообщение
В любом случаи, проще создать 2D копию, 3D кривой (если исходную "плющить" нельзя), и уже с 2D "курва-гетать" всё что угодно.
я так тоже могу
в том и смысл, чтоб не растерять z
Цитата:
Сообщение от Disney Посмотреть сообщение
Один фиг не понял, не смотря на то что я сам вроде как геодезист
наверно не работаешь на линейных объектах
G-RAV вне форума  
 
Непрочитано 18.12.2012, 19:06
#11
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Цитата:
Сообщение от G-RAV Посмотреть сообщение
в том и смысл, чтоб не растерять z
зачем терять? ты ведь копию делаешь...
Vov.Ka вне форума  
 
Автор темы   Непрочитано 18.12.2012, 19:21
#12
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Цитата:
Сообщение от Vov.Ka Посмотреть сообщение
зачем терять? ты ведь копию делаешь...
3д полилиния, скажем, длиной 100м, с одной стороны отметка z=150.00 с другой z=220.000
Какая отметка будет на 3д полилинии через 25м двумерного расстояния (или горизонтального проложения)?
G-RAV вне форума  
 
Непрочитано 18.12.2012, 19:26
#13
Кулик Алексей aka kpblc
Moderator

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


3D-полилиния в этом отношении неинтересна: там можно высчитать аппроксимацией. Со сплайнами будет намного веселее...
P.S. См.в сторону vlax-curve-getclosestpointtoprojection
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.12.2012, 19:34
#14
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
3D-полилиния в этом отношении неинтересна: там можно высчитать аппроксимацией. Со сплайнами будет намного веселее...
P.S. См.в сторону vlax-curve-getclosestpointtoprojection
Спасибо, добрый человек... что то вроде похоже, как я ее пропустил...
сплайн будет запрещен... как раз он неинтересен...
------
Эврика... все ж оказалось гораздо проще, чем я предпологал)))...
у 3D-полилинии с разными отметками и проведенной по ней же полилинии при равном 2d расстоянии будет одинаковый параметр точки...
------

поправил код #6, сейчас вроде работает как надо...

Последний раз редактировалось G-RAV, 18.12.2012 в 23:17.
G-RAV вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Определение трехмерной длины по двумерной. LISP



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение расчетной длины колонны (?) loje4ka Конструкции зданий и сооружений 46 12.04.2016 15:53
Определение расчетной длины буронабивной сваи Evgeny31 Основания и фундаменты 12 28.02.2013 20:46
Определение длины криволинейного стержня leon12 Разное 4 05.12.2011 14:13
Lisp - ошибка определения длины объекта Лиспер LISP 8 30.11.2010 00:37
Сплайн. Определение длины и площади Albino AutoCAD 11 20.08.2009 10:02