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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Тригонометрические функции и векторная алгебра

Тригонометрические функции и векторная алгебра

Ответ
Поиск в этой теме
Непрочитано 20.11.2009, 18:38 #1
Тригонометрические функции и векторная алгебра
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

Решил переделать тему и собрать тут все, необходимое для вычислений в пространстве модели Автокада.

Вычисление расстояния от точки до точки:
(distance <точка1> <точка2>)
Аргуметы в виде списков (X Y Z)
В книге Н. Н. Полещука "AutoLISP и Visual Lisp в среде AutoCAD" в этой функции опечатка.
Цитата:
... Если точки трехмерные, то функция рассчитывает угол между осью Х и проекцией вектора, идущего из первой точки во вторую точку, на текущую плоскость построений. ...
Весь этот текст следует просто зачеркнуть. Остальное правильно.

Получение координат точки, лежащей на середине расстояния по прямой, между двумя точками:

Получение координат точки лежащей от точки P1 на расстоянии L в направлении точки P2:

Получение единичного вектора по двум точкам:

Функция EULER-XY
Вычисление углов Эйлера, определяющих разворот ПСК относительно МСК.
по двум векторам направления осей X и Y ПСК.

Функция EULER-Z
Вычисление углов Эйлера, определяющих разворот ПСК относительно МСК.
по направлением оси Z ПСК.

Функция ORT
Вычисляет орт двумерного или трехмерного вектора из точки 0,0,0 в указанную точку

Функция VXV
Вычисляет векторное произведения векторов.
Возврат: список из трех координат результирующего вектора.

Функция VAV.
Определяет взаимное направление 2х векторов. (к сожалению, вектора задаются как направление
из точки 0,0,0 в указанную точку)
Возврат: число - угол между векторами в радианах [0 ; Pi].


Функция GET-UCS-MATRIX
Вычисляет матрицу прямого или обратного преобразования для использования в ActiveX методе TransformBy.
Аргументы.
Функция получает в качестве 1-го аргумента точку начала мысленной ПСК (ПСК не обязана реально существовать).
В качестве второго и третьего аргументов - векторы осей X и Y ПСК.


Получение векторов Z, -Z, X, -X, Y и -Y ПСК объекта по его нормали и углу поворота

Функция по получению точки вставки и трех векторов объекта

Скалярное произведение векторов, однако!

Вычисление точки, лежащей на прямой, пересекающей плоскость.

Функция вычисления угла между векторами (в градусах и от 0 до 180).

Последний раз редактировалось Supermax, 07.12.2009 в 18:22.
Просмотров: 42309
 
Непрочитано 20.11.2009, 21:35
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Так покрасивше будет
Код:
[Выделить все]
(defun cenr-point-line (pt1 pt2)
  (mapcar '* (mapcar '+ pt1 pt2) '(0.5 0.5 0.5))
  )
Вот еще одна ф-ция.
Код:
[Выделить все]
; Точка лежащая от точки P1 на расстоянии L в направлении точки P2
;-----------------------------------------------------------------
;Параметры:
;p1 - первая точка
;p2 - точка в направлении которой производится откладка
;L  - расстояние
(defun 3d_polarp (P1 P2 L)
 (setq L (/ L (distance P1 P2)))
 (mapcar '+ P1 (mapcar '(lambda (V) (* V L)) (mapcar '- P2 P1)))
)
Цитата:
3d_lib.zip
posted http://www.theswamp.org/index.php?topic=37319.0
http://www.cadtutor.net/forum/showth...858#post634858
http://www.cad.dp.ua/progs/program2.php

Author: Gregory Cherevko
http://www.elecran.com.ua/
===========================
No liability for the use of these texts and the possible errors the authors did not carry.


General comments
functions are written in AutoLisp
All calculations are made by mathematical methods (vector algebra, analytic geometry) without using auxiliary AutoCAD entities and their analysis.
Global variables
Many library functions refer to two global variables
The variable $ P000 has the value '(0.0 0.0 0.0)
$ Dopusk has a value of 0.00001 - contains the error value is used for various comparisons (such as coordinates of points). He just needed to cope with the accumulated error in the calculations.
To initialize variables in the start of your program to insert the line
(Setq $ P000 '(0.0 0.0 0.0)
$ Dopusk 0.00001
)

Naming of variables, parameters
In the parameters of these functions are frequently used variable names.
P, P1, P2, P3 .... - Points
Pc - the central point of an arc or a circle
L, Lx, Ly, Lz - length
Wekt, Wekt1, Wekt2, WektX, WektY, WektZ, W, W1, W2-vector (the list of 3 numbers)
WNorm - normal vector. In terms of AutoCAD it comes to squeezing the direction vector, which all primitives stored under 210 associative code.
Ang - angle
R, R1, R2 - radius
================================================== ====================
Calculations of the arcs

1. Distance from a point in the plane of the arc to arc (1.zip)
2. Calculating the arc length (2.zip)
3. Calculation of the central angle of arc (3.zip)
4. Computation of the mid-point arc (4.zip)
5. Calculation of the center of the arc (the arc is defined by 2 points and the direction
tangent to the 1-th point) (5.zip)

Analysis functions belonging and intersection elements

6. Accessory points on the line, set point and the vector (15.zip)
7. Affiliation point interval (16.zip)
8. Affiliation point arc (all points in the same plane!) (17.zip)
9. Affiliation point arc (points in different planes!) (18.zip)
10. Affiliation arc arc (19.zip)

Function calculating the intersection of objects in space

11. The intersection of 2 circles given center and radius,
coplanar (10.zip)
12. The intersection of 2 circles given center and radius,
located in a given plane (11.zip)
13. Point of intersection of the line and plane (12.zip)
14. Point of intersection of the circle with the plane (13.zip)
15. Calculation of the intersection line of planes (14.zip)
16. Intersection of line and circle, lying in one plane (8.zip)
17. Intersection of line and circle, randomly located (9.zip)

General purpose functions

18. Vector product of vectors (20.zip)
19. Vector normal to the plane. The plane defined by 3 points (21.zip)
20. Calculation of the unit vector (unit vector) (22.zip)
21. Reduction of the vector to the length of 1000 (long vector) (23.zip)
22. Point lying on the point P1 at a distance L in the direction of the point P2 (24.zip)
23. Point lying on P1 at a distance L along the vector Wekt (25.zip)
24. Point, offset by a 2-m vectors (26.zip)
25. The condition of orthogonality (27.zip)
26. The angle between the vectors (29.zip)
27. The angle between the vectors in a clockwise direction from the normal (30.zip)
28. Vector angle with respect to this part of the normal (31.zip)
29. The nearest point from a given point of the segment (32.zip)
30. The distance from the point to the segment (33.zip)
31. Rotate the point around the axis (34.zip)
32. Projection of a point on the line (line set-point vector) (35.zip)
33. Projection of a point on the line (line given two points) (36.zip)
34. Projection of a point on the plane (37.zip)
35. The distance between the planes (38.zip)

Function of spatial geometry

36. Calculation of the point of contact from the point of the circle (6.zip)
37. The calculation of the points of contact to the 2-m circles (7.zip)
================================================== =======================
Вложения
Тип файла: zip 3d_lib.zip (22.2 Кб, 22 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 14.06.2015 в 12:18.
VVA вне форума  
 
Автор темы   Непрочитано 21.11.2009, 14:03
#3
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


VVA, ты гений, ты это знаешь?
Так на основе последней функции можно сделать единичный вектор.
Делаем L=1 и пересчитываем ту точку, от которой делали отсчет в 0,0,0.
Функцию можно назвать points-vector.
Supermax вне форума  
 
Непрочитано 21.11.2009, 19:54
#4
zamtmn

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


>>Делаем L=1 и пересчитываем ту точку, от которой делали отсчет в 0,0,0.
чтоб получить единичный вектор, достаточно разделить каждую координату на длинну этого вектроа, ненадо ничего никуда переносить
>>Функцию можно назвать points-vector.
вообщето это называется - нормализация
Почитайте чтонибудь по геометрии, например http://algolist.ru/maths/geom/index.php, подобных вопросов возникать не будет
zamtmn вне форума  
 
Автор темы   Непрочитано 21.11.2009, 21:32
#5
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


zamtmn,
"Чукча не читатель, Чукча - писатель!"
Цитата:
... чтоб получить единичный вектор, достаточно разделить каждую координату на длинну этого вектроа ...
Ну так раздели. Сделай доброе дело, напиши функцию.
Видишь, я функции граблями пишу, а люди (VVA) - душою.
Или у тебя тоже грабли?
Supermax вне форума  
 
Непрочитано 21.11.2009, 22:03
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Честно говоря прочитал через строку - если нужна функция получения единичного вектора - "моя бибилиотечная":
Код:
[Выделить все]
(defun getvektor (pt1 pt2 / tmp); единичный вектор направления заданный точками pt1 pt2.
(setq tmp (mapcar '- pt1 pt2))
(if (not (equal tmp '(0.0 0.0 0.0)))
(mapcar '(lambda (x) (/ (float x) (apply 'max (mapcar 'abs tmp)))) tmp)
);end of if
);end of getvektor
получаеться единичный вектор (типа того что лежит в 210 DXF'e)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 22.11.2009, 12:45
#7
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


О! Укуси меня пчела!
Ну, наверное надо тему переименовать в "Тригонометрические функции"
Мне еще надо превращать единичный вектор оси Z объекта, который 210 парой показывается в:
1: Его атипод (-Z)
2: Вектор абсцисс (Х)
3: Антипод абсцисс (-Х)
4: Вектор ординат (Y)
5: Антипод ординат (-Y)

Вот в MTEXT-е 11 пара - вектор абсцисс объекта MTEXT. А в других объектах его нет, надо вычислять.

Нужна функция, которая по начальной точке, вектору и длинне дает координаты точки.

Нужны еще несколько функций и в Автокаде можно будет крутить-вертеть все, что угодно.

Дима_, только надо pt1 и pt2 местами поменять. первая точка должна быть "из", а вторая "в", а не наоборот.

Последний раз редактировалось Supermax, 22.11.2009 в 13:02.
Supermax вне форума  
 
Непрочитано 22.11.2009, 14:28
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Возможно - я его писал когда нужно было смоделировать плоскую модель тела при просмотре с некого вектора - видимо поэтому и получилось "наоборот" - это просто с какой стороны смотреть.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 22.11.2009, 18:10
#9
zamtmn

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


>>Ну, наверное надо тему переименовать в "Тригонометрические функции"
тригонометрия - sin, cos и т.д., такчто переименовать лучше чтоб в названии векторная алгебра фигурировала

>>Или у тебя тоже грабли?
к сожалению на лиспе ни граблями ни чем другим не умею))

>>Вот в MTEXT-е 11 пара - вектор абсцисс объекта MTEXT. А в других объектах его нет, надо вычислять.
в других объектах есть угол поворота, вычисление 0x в этом случае описано в разделе arbitrary axis algorithm DXF Reference
zamtmn вне форума  
 
Автор темы   Непрочитано 22.11.2009, 18:20
#10
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Чую и синусы понадобятся.
А про песчет векторов с учетом угла поворота - ссылочку плииз!
В MTEXT и угол поворота есть и х-вектор и z-вектор. А нужны все, и не для коллекции.
Supermax вне форума  
 
Непрочитано 22.11.2009, 18:44
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


DwgRuLispLib: Тригонометрические функции
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.11.2009, 19:01
#12
zamtmn

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


>>Чую и синусы понадобятся.
Понадобятся только чтоб перейти от угла к вектору или создать матрицу поворота.

>>А про песчет векторов с учетом угла поворота - ссылочку плииз!
ссылочки нету, но если нужно получить 0x из угла поворота(u):
0x=(cos(u),sin(u),0) это если 0z=0,0,1
если нет, сначала нужно получить 0x используя arbitrary axis algorithm, потом повернуть его на угол u вокруг 0z

>>В MTEXT и угол поворота есть и х-вектор и z-вектор. А нужны все, и не для коллекции.
насколько помню, в MTEXT - угол поворота и ox - одно и тоже
если есть 0x,0z, то 0y - векторное произведение 0x и 0z (нужно промнить что векторное произведение зависит от мерестановки мест, какая последовательность 0x*0z или 0z*0x я не помню)

>>Нужны еще несколько функций и в Автокаде можно будет крутить-вертеть все, что угодно.
чтобы крутить всё что угодно нужно:

векторное произведение
скалярное произведение
умножение вектора на матрицу
умножение матрицы на матрицу
создание матрицы поворота вокруг 0x
создание матрицы поворота вокруг 0y
создание матрицы поворота вокруг 0z
создание матрицы поворота вокруг произвольного вектора

лисп насколько понимаю - очень неудобный для этого язык

Последний раз редактировалось zamtmn, 22.11.2009 в 19:26.
zamtmn вне форума  
 
Автор темы   Непрочитано 22.11.2009, 20:23
#13
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну зачем так сложно? В Автокаде все уже почти есть.
Воспользуемся услужливо нам даденным MTEXT-ом.
Создаем временный объект с точкой вставки 0,0,0 и задаем ему угол поворота и вектор, получаем из 11 пары вектор Х. Крутим вокруг него на 90 гр. и получаем Y. антиподы делаются простой сменой знаков.
Supermax вне форума  
 
Непрочитано 22.11.2009, 20:27
#14
zamtmn

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


>>Ну зачем так сложно? В Автокаде все уже почти есть.
>>Воспользуемся услужливо нам даденным MTEXT-ом.

Ну я бы не сказал что создать объект проще чем сделать несколько векторных произведений, такой подход с добру не приведет
zamtmn вне форума  
 
Автор темы   Непрочитано 22.11.2009, 20:33
#15
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Так дай пару формул. В лиспе есть и синусы косинусы. Все есть.
И завязывай цитировать, раздрожает.
Supermax вне форума  
 
Непрочитано 22.11.2009, 20:35
#16
zamtmn

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


пару формул для чего?
zamtmn вне форума  
 
Непрочитано 22.11.2009, 20:40
#17
Кулик Алексей aka kpblc
Moderator

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


не очень понимаю, чем trans не угодил? Или это вообще не в теме?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.11.2009, 20:40
#18
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну, типа, дан единичный вектор Z и угол поворота вокруг него. Надо найти координату оси Х и т.д.
Ясно дело, если угол = 0, то Х= (1,0,0), а если не нулю?

Кулик Алексей aka kpblc , не, не угодил. Он переводит пользовательские координаты в мировые и обратно, ну еще экранные. А тут речь идет о том, в какую сторону откладывать расстояние, если тебе дана не та ось, что тебе надо.
Вот сделай MTEXT, поверни его в нескольких плоскостях и попробуй сделать вокруг него рамку.
И GetBoundingBox тебе не поможет.
Supermax вне форума  
 
Непрочитано 22.11.2009, 21:08
#19
zamtmn

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


могу дать расчет системы координат вставки блока на паскале, там есть и нормаль и поворот, но используется матричное вычисление и векторное произведение, в лиспе это можно заюзать?

>>Ясно дело, если угол = 0, то Х= (1,0,0), а если не нулю?
нет, 0x зависит не только от угла но и от нормали (группа 210 помоему)
zamtmn вне форума  
 
Непрочитано 22.11.2009, 21:10
#20
Кулик Алексей aka kpblc
Moderator

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


Можно, конечно Векторное произведение я как-то делал (да и так, если порыскать, думаю, найти можно). А преобразование координат можно выполнять либо через trans, либо через TransformationMatrix (кажется, так).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Тригонометрические функции и векторная алгебра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рифмоплетство. Kryaker Разное 554 14.11.2023 11:59
Определение высот рельефа по близлежащим точкам dextron3 Программирование 21 10.11.2011 13:14
Интерполяция между двумя точками postbudka Программирование 27 21.05.2009 10:00
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
Координаты точки, лежащей на полилинии Al_Taron Программирование 1 27.11.2006 09:45