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

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

Нужен лисп, который высчитывает уклон линии

Ответ
Поиск в этой теме
Непрочитано 14.11.2005, 09:30
Нужен лисп, который высчитывает уклон линии
ВоваН
 
Дороги, Конструкции, Тоннели
 
Сочи
Регистрация: 20.05.2004
Сообщений: 102

Нужен лисп, который высчитывает уклон линии.

Берем у выделенной линии Delta X, Delta Y и производим следующую операцию:

(Delta Y / Delta X)*1000

Результат выводим в командную строку.

Спасибо
Просмотров: 32400
 
Непрочитано 01.06.2020, 08:45
#41
iSpawn


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


Цитата:
Сообщение от Krieger Посмотреть сообщение
Лови:
Код:
[Выделить все]
(defun ppm->grd (ppm)
  (/ (* (atan (/ ppm 1000)) 180) pi)
	 )
неправильно, наверное, выразился. Нужен лисп который будет измерять уклон между двумя горизонталями с заданной высотой и выводить это всё не в мм/м или промилле, а в старых добрых градусах.
iSpawn вне форума  
 
Непрочитано 01.06.2020, 09:12
#42
Кулик Алексей aka kpblc
Moderator

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


_.dimangular ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2020, 09:27
#43
iSpawn


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
_.dimangular ?
имеются несколько горизонталей с разным уровнем (всё в плане), нужно вычислить угол падения в градусах, а _.dimangular вычисляет угол между отрезками на плоскости.
есть команда CGSLIST но она выдаёт в промилле.

Последний раз редактировалось iSpawn, 01.06.2020 в 09:40.
iSpawn вне форума  
 
Непрочитано 01.06.2020, 09:58
#44
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Ну если есть код, который уже все делает в промилле, то осталось только перевести результат в градусы:

Код:
[Выделить все]
(ppm->grd (c:CGSLIST))

(defun ppm->grd (ppm)
  (/ (* (atan (/ ppm 1000)) 180) pi)
	 )
PS Я не знаю, что за команда такая CGSLIST. Код в студию.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от iSpawn Посмотреть сообщение
неправильно, наверное, выразился. Нужен лисп который будет измерять уклон между двумя горизонталями с заданной высотой и выводить это всё не в мм/м или промилле, а в старых добрых градусах.
Кстасти, как лисп узнает, какие высоты у горизонталей?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 01.06.2020, 10:34
#45
iSpawn


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


Цитата:
Сообщение от Krieger Посмотреть сообщение
Ну если есть код, который уже все делает в промилле, то осталось только перевести результат в градусы:

Код:
[Выделить все]
(ppm->grd (c:CGSLIST))

(defun ppm->grd (ppm)
  (/ (* (atan (/ ppm 1000)) 180) pi)
	 )
PS Я не знаю, что за команда такая CGSLIST. Код в студию.

----- добавлено через ~2 мин. -----

Кстасти, как лисп узнает, какие высоты у горизонталей?
Я не знаю как код команды открыть, команда из Map3d, также работает в civil3d. Указываешь точку на одной горизонтали и на другой, и в командной строке выводится:
""Первая отметка: 300.00м; вторая отметка: 250.00м; разность отметок: -50.00м
уклон: -700.31‰; откос: -1:1.43; расст. по горизонтали: 71.40м""

Что-то твой лисп не запускается, команда ж для запуска ppm?
iSpawn вне форума  
 
Непрочитано 01.06.2020, 11:14
#46
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Цитата:
Сообщение от iSpawn Посмотреть сообщение
Что-то твой лисп не запускается, команда ж для запуска ppm?
Это функция запускаетсяв скобках с параметрами, например "(ppm->grd 700.31)".
У меня нет MAP и Civil. Код от туда вытащить не получится. Я не смогу определить высоты горизонталей, если они на плосокости начерчены (полагаю это только MAP и знает), а значит и вычислить уклон. Если они в 3D, то, впринципе, можно. Тогда нужен пример.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 01.06.2020, 11:50
#47
iSpawn


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


Цитата:
Сообщение от Krieger Посмотреть сообщение
Тогда нужен пример.
каждая линия имеет свой уровень (т.е. высоту)
Вложения
Тип файла: dwg
DWG 2013
Пример.dwg (406.0 Кб, 20 просмотров)
iSpawn вне форума  
 
Непрочитано 02.06.2020, 05:42
1 | #48
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Пробуй:
Код:
[Выделить все]
 (defun c:uklon (/) (Kr_uklon))
(defun Kr_uklon (/ pt1 pt2 dist1 dist2 dist3 z1 z2 ang)
(setq pt1 (trans (getpoint "Укажи первую отметку: ") 1 0)
      pt2 (trans (getpoint (trans pt1 0 1) "\nУкажи вторую отметку: ") 1 0)
      dist1 (distance pt1 pt2)
      z1 (caddr pt1)
      z2 (caddr pt2)
      dist2 (abs (- z1 z2))
      dist3 (sqrt (- (* dist1 dist1) (* dist2 dist2)))
      ang (/ (* (atan (/ dist2 dist3)) 180) pi)
)
(princ (strcat "Первая отметка: " (rtos z1 2 2) "м; вторая отметка: " (rtos z2 2 2) "м; разность отметок: " (rtos dist2 2 2) "м"))
(princ (strcat "\nуклон: " (rtos ang 2 2) "градусов; расст. по горизонтали: " (rtos dist3 2 2) "м"))
(princ)
  )
Команда - uklon
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 02.06.2020, 08:39
#49
iSpawn


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


Цитата:
Сообщение от Krieger Посмотреть сообщение
Пробуй:
Команда - uklon
Шикарно! Спасибо. От неумения в лиспы пришлось пилить формулу в экселе =).
А не будет большой наглость попросить прикрутить еще одну функцию - вычисление среднего из 3х измерений ? Чтоб три раза меряешь, а оно тебе среднее даёт.
iSpawn вне форума  
 
Непрочитано 02.06.2020, 10:06
1 | #50
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Цитата:
Сообщение от iSpawn Посмотреть сообщение
Шикарно! Спасибо. От неумения в лиспы пришлось пилить формулу в экселе =).
А не будет большой наглость попросить прикрутить еще одну функцию - вычисление среднего из 3х измерений ? Чтоб три раза меряешь, а оно тебе среднее даёт.
Если правильно понял:
Код:
[Выделить все]
 (defun c:uklon (/) (Kr_uklon))
(defun Kr_uklon (/ pt1 pt2 dist1 dist2 dist3 z1 z2 ang)
  (if (setq pt1 (getpoint "\nУкажи первую отметку: "))
    (if (setq pt2 (getpoint pt1 "\nУкажи вторую отметку: "))
      (progn
	(setq dist1 (distance (trans pt1 1 0) (trans pt2 1 0))
	      z1 (caddr (trans pt1 1 0))
	      z2 (caddr (trans pt2 1 0))
	      dist2 (abs (- z1 z2))
	      dist3 (sqrt (- (* dist1 dist1) (* dist2 dist2)))
	      ang (/ (* (atan (/ dist2 dist3)) 180) pi)
	);setq
	(princ (strcat "\nПервая отметка: " (rtos z1 2 2) "м; вторая отметка: " (rtos z2 2 2) "м; разность отметок: " (rtos dist2 2 2) "м"))
	(princ (strcat "\nуклон: " (rtos ang 2 2) "градусов; расст. по горизонтали: " (rtos dist3 2 2) "м"))
	(princ)
      );progn
  );if
    );if
  );defun

(defun Kr_ugol (n / pt1 pt2 dist1 dist2 dist3 z1 z2 ang)
  (if (setq pt1 (getpoint (strcat "\nУкажи первую отметку " (itoa n) "-го отрезка: ")))
    (if (setq pt2 (getpoint pt1 (strcat "\nУкажи вторую отметку " (itoa n) "-го отрезка: ")))
      (progn
	(setq dist1 (distance (trans pt1 1 0) (trans pt2 1 0))
	      z1 (caddr (trans pt1 1 0))
	      z2 (caddr (trans pt2 1 0))
	      dist2 (abs (- z1 z2))
	      dist3 (sqrt (- (* dist1 dist1) (* dist2 dist2)))
	      ang (/ (* (atan (/ dist2 dist3)) 180) pi)
	      );setq
  ang);progn
      nil
      );if
    nil
    );if
  );defun
      

      

(defun c:sr_uklon (/ ang1 ang2 ang3)
  (if (setq ang1 (Kr_ugol 1))
    (if (setq ang2 (Kr_ugol 2))
      (if (setq ang3 (Kr_ugol 3))
	(princ (strcat "\nСредний уклон из 3-х: " (rtos (/ (+ ang1 ang2 ang3) 3) 2 2) " градусов"))
	(princ (strcat "\nСредний уклон из 2-х: " (rtos (/ (+ ang1 ang2) 2) 2 2) " градусов"))
	);if
      (princ (strcat "\nУклон: " (rtos ang1 2 2) " градусов"))
      );if
    );if
  (princ)
  );defun
Команда "sr_uklon"
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 02.06.2020, 13:38
#51
iSpawn


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


Цитата:
Сообщение от Krieger Посмотреть сообщение
Если правильно понял:
Команда "sr_uklon"
Еще раз огромное спасибо. Буду тестировать, но на первый взгляд - то что нужно
iSpawn вне форума  
 
Непрочитано 01.06.2021, 15:04 Добрый день! может кто нибудь помочь сделать так, что бы уклоны выдавался в промилле? с лиспами не очень, у самого не получается
#52
Alexander Socad


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


Цитата:
Сообщение от Krieger Посмотреть сообщение
Пробуй:
Код:
[Выделить все]
 (defun c:uklon (/) (Kr_uklon))
(defun Kr_uklon (/ pt1 pt2 dist1 dist2 dist3 z1 z2 ang)
(setq pt1 (trans (getpoint "Укажи первую отметку: ") 1 0)
      pt2 (trans (getpoint (trans pt1 0 1) "\nУкажи вторую отметку: ") 1 0)
      dist1 (distance pt1 pt2)
      z1 (caddr pt1)
      z2 (caddr pt2)
      dist2 (abs (- z1 z2))
      dist3 (sqrt (- (* dist1 dist1) (* dist2 dist2)))
      ang (/ (* (atan (/ dist2 dist3)) 180) pi)
)
(princ (strcat "Первая отметка: " (rtos z1 2 2) "м; вторая отметка: " (rtos z2 2 2) "м; разность отметок: " (rtos dist2 2 2) "м"))
(princ (strcat "\nуклон: " (rtos ang 2 2) "градусов; расст. по горизонтали: " (rtos dist3 2 2) "м"))
(princ)
  )
Команда - uklon

Добрый день! может кто нибудь помочь сделать так, что бы уклоны выдавался в промилле? с лиспами не очень, у самого не получается
Alexander Socad вне форума  
 
Непрочитано 02.06.2021, 06:07
#53
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от Alexander Socad Посмотреть сообщение
10
******ang (/ (* (atan (/ dist2 dist3)) 180) pi)
ang (* (/ (abs (- z1 z2)) dist3) 1000)
Цитата:
Сообщение от Alexander Socad Посмотреть сообщение
(strcat "\nуклон: " (rtos ang 2 2) "градусов; расст. по горизонтали: " (rtos dist3 2 2) "м")
(strcat "\nуклон: " (rtos ang 2 2) "‰; расст. по горизонтали: " (rtos dist3 2 2) "м")
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 02.06.2021, 10:09
#54
Alexander Socad


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


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
ang (* (/ (abs (- z1 z2)) dist3) 1000)

(strcat "\nуклон: " (rtos ang 2 2) "‰; расст. по горизонтали: " (rtos dist3 2 2) "м")
Спасибо огромное!!! Все работает)))
Alexander Socad вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужен лисп, который высчитывает уклон линии

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск