Страницы: 1
RSS
Решить задачу по начертательной геометрии: 3D точки в 2D
 
Добрый вечер.

Задача следующая . Имеется массив  точек образующих плоскость. Допустим их 3штуки  (-700;200;300),(-600;1400;-700)(1500;1000;50)
Нужно вычислить координаты в 2D  в случае если мы смотрим перпендикулярно на плоскость Либо с одной либо с другой стороны. Нужно написать процедуру на VBA.


Решение в данном конкретном случае
(-1584;729)(538;1520)(639;-41) все числа округлены Ответ брал в CAD Solidworks.
 
Цитата
Sla_0412 написал:
Допустим их 3штуки  (-700;200;300),(-600;1400;-700)(1500;1000;50)
Плоскость строится из трёх точек, Нельзя говорить "Допустим". Из массива точек с координатами образуется поверхность.

У меня в институте преподавали аналитическу геометрию, если я хорошо все помню, то "на руках" намного легче считается чем в экселе. Я сильно не понимаю тригонометрию в Excel
Изменено: Akropochev - 21.08.2017 22:40:42
 
Прошу прощения за неточности. Массив состоит из 3 и более точек. В данном случае самый простой случай плоскости
Изменено: Sla_0412 - 21.08.2017 22:38:10
 
Я до конца сам не пойму ... достаточно ли условий? Смысл в том чтобы точки совпадали как в программе solidworks.
 
Цитата
Sla_0412 написал:
Массив состоит из 3 и более точек. В данном случае самый простой случай плоскости
Только 3, никаких более
 
Еще как более... но не менее.
Входные данные в виде массива arr(1 to n, 1 to 3)
 
http://clip2net.com/s/3N6Z0lp
 
Народ. Кто в курсе ...задачка решаема или нет? Достаточно ли условий входных? Я сам не пойму по каким критериям sw разворачивает эскиз в 2D c осями. Я подумал, раз он это делает, значит решаемо как то.
 
Эх, а Вы меня сподвигли возобновить в памяти аналитичку) А ведь я инженер-строитель.  Но сходу, в "лоб"  Возведите координаты Х в квадрат прибавьте к ним координаты Y в квадрате из полученного результата извлеките корень, а потом помножьте на отношение Х к полученному результату и т.д.
 
Ох уж и не знаю. Я "решателям" на мат. сайтах тоже самое скинул. Все молчат. Один отказался ввиду того что тема не знакома.Этот форум меня всегда выручал. Тут люди как то  "человечные" что ли. Многие просто помогают на голом энтузиазме.
 
Sla_0412, Работаю в AutoCAD в основном, работаю как в 2D плоскости , так и в 3D, честно не совсем понял задачу, что Вам нужно. Можно подробнее :)
Я понял это так, есть плоскость с тремя координатами, вы ее повернули на себя и смотрите на нее как на 2D плоскость, от сюда возникает вопрос как ее поворачивать по часовой, против, так же ее можно повернуть так что будет видна одна линия, при разных поворотах, будут разные координаты.Или я не так понял что то  :)  
Изменено: Laemafin - 22.08.2017 04:05:20
 
Задача неординарная, думаю модераторы ругать меня не будут за подсказку для исполнителя.
По координатам точек находим вектор нормали плоскости.Поворачиваем оси координат так, что бы одна из осей стала параллельна вектору.Это мое мнение.
 
Doober, вам правильно говорит. Ничего крутить не надо. Надо найти нормаль к плоскости. Точка пересечения нормали с плоскостью и даст вам 2D координату на этой плоскости.
Исходных данных достаточно. Решение есть. Я бы занялся, но свободного времени нет вообще.
Изменено: Joiner - 22.08.2017 11:36:09
Никому не отвечай, кoгда ты зол, ничего не обeщай, когда ты счастлив, никогда нe решай, когда ты грустeн.
 
На самом деле, это просто задача на замену базиса. И вам просто надо ещё задать "систему координат", по отношению к которой вы собираетесь рассматривать ваше множество точек "с нового угла зрения"  :)
В начале - у вас заданы координаты ваших точек (например, левая декартова система координат, виртуальное начало координат совпадает с нулём). Например, вы хотите привести все к координатной системе Excel (правая декартова, ось аппликат направлена "из экрана к вам", отображается проекция на плоскость XY), плюс надо ещё учесть масштабирование, если вы работаете с "реальными физическими размерами", и определиться с ещё, где вы расположите "новое начало координат".
После этого делаем замену базиса и пересчитываем координаты с учетом нового положения начала. И для "типа 2D" берем соответствующие две координаты из тройки.

Вся "неординарность" задачи сводится только к тому, понимает ли ТС, что именно он хочет получить. "Координаты точек" не существуют в отрыве от базиса и начала координат. А задача "Получить 2D" - это не просто задача "получить перпендикулярную проекцию на плоскость" (что хочет ТС). Хотя в данном конкретном случае - она именно вот эта частная.
 
Цитата
Joiner написал:
Точка пересечения нормали с плоскостью
Нормаль нашел и как ее использовать?
 
Цитата
AndreTM написал:
Вся "неординарность" задачи сводится только к тому, понимает ли ТС, что именно он хочет получить. "Координаты точек" не существуют в отрыве от базиса и начала координат. А задача "Получить 2D" - это не просто задача "получить перпендикулярную проекцию на плоскость" (что хочет ТС). Хотя в данном конкретном случае - она именно вот эта частная.
Я просто основываюсь на том что CAD SW однозначно показывает 2D точки. Скрин есть. Причем точка триады плоскостей в 3D, при просмотре на нормаль совпадает с точкой в двумерной системе координат. (посмотрите скрин) Я не пойму по каким правилам ось X и ось Y стоят так и никак иначе..
 
Цитата
Sla_0412 написал:
Я не пойму по каким правилам ось X и ось Y стоят так и никак иначе
Вам надо понимать, как у вас будут стоять новые ваши оси XYZ. И понимать, для чего именно вы строите новые координаты (т.е. новый смысл этой координатной системы, куда он прикладываться будет?)

Вот смотрИте:
Имеющиеся у вас "координаты точек", судя по значениям и скрину, задают проекции в миллиметрах, базис правый декартов (слева внизу трехцветный);
А отображение на экран - это уже своя система координат: это мы "смотрим" на наши точки из "точки расположения камеры" (экран при этом представляет какой-то прямоугольный фрейм, перпендикулярный направлению взгляда - вот это именно та "плоскость, на которую проецируется изображение"), и, судя по всему, то, что вы нам преподносите как "решение солидворкса" - это, на самом деле, пересчитанные исходные координаты для нового базиса относительно "камеры".

Если вы хотите именно их получать - так вопрос, зачем? И если зачем-то, то как раз да, надо ещё исходные данные "базиса камеры" иметь.

А если вы хотите "такую же картинку, но в Excel - то вам не нужны данные пересчётов солидворкса, достаточно иметь данные по исходным точкам, их и использовать, уже рассчитывая все для того "вида отображения", который вы придумаете для Excel.
 
Эксель тут ни причем. API SW работает под VBA. Все делается для построения твердотелов. Я уже почти самостоятельно догадался как мне эти точки высчитать. Сейчас решаю. Кому интересно , если у меня все получится пишите в лс
 
Там не надо "догадываться". Там надо просто посчитать.

Вам же сказано: новые данные - это проекции точек на "виртуальную плоскость", которую SW отображает на ваш монитор.
У вас есть трехмерные виды объекта? Они же показываются из какой-то точки "общего пространства" координат, так ведь? То есть, например, вращая объект - на самом деле вы перемещаете точку, откуда на него смОтрите. Нет, конечно, можно заниматься пересчетом базовых координат объекта, вместо движения камеры - но никто такие глупости не творит. Базовые координаты изменятся только если вы именно положение точки "в мире" смените.
То же самое и с "плоскими проекциями". Обратите внимание на то, что если вы будете с "другого угла" делать те же расчеты - то получатся другие значения в ответе. Хотя базовые координаты точек (которые XYZ справа внизу у вас рисуются) - останутся теми же.

SW вам, кстати, незря рисует расположение базиса, а также точки начала координат.
Разберитесь, что обозначают эти рисуночки (которые три разноцветных вектора, и крестик с парой синих и парой красных стрелочек)...
Изменено: AndreTM - 22.08.2017 20:09:51
 
Спасибо всем за советы. Я на 98 % все сделал. Сейчас отрабатываю условия при параллельности плоскостей основным XY ZX ZY. Еще есть мелочи со знаками координат. Один и тот же массив точек дает 2 решения в зависимости от стороны просмотра на плоскость. А так значения координат считаются точно и совпадают с солидовскими.
 
Цитата
Sla_0412 написал:
при параллельности плоскостей основным XY ZX ZY.
Так а что там считать-то при таких условиях?

Если вы накладываете условие "параллельности плоскости отображения одной из плоскостей базиса" (и, как я понимаю, не смещаете точку начала координат) - то даже матриц перехода не нужно, там только значения имеющихся координат и знаки выставить.
(Cчитаем, что "мировой базис" - это левая декартова система, X направлена вправо, Y - вверх, Z - от нас).
То есть, например, для расчета проекции на X'Y' (X' - влево, Y' - вверх, Z' - к нам, как в SW) просто подставляем {-x;y}.
Для "взгляда с другой стороны" не обязательно считать заново, можно перейти от посчитанных координат для "плоскости отображения". Поскольку для плоского рисунка "взгляд с другой стороны" - это зеркальное отражение относительно вертикальной оси, т.е. просто меняем знак первой координаты.
XY = {-x;y}, (XY)' = {x;y}
ZX = {-z;x}, (ZX)' = {z;x}
YZ = {-y,z}, (YZ)' = {y;z}
Если учитывать ещё и базисы обратной ориентации, то
YX = {-y,x}, (YX)' = {y,x}
XZ = {-x;z}, (XZ)' = {x;z}
ZY = {-z;y}, (ZY)' = {z;y}
 
Изменено: AndreTM - 23.08.2017 01:21:18
 
Все гораздо проще . Обошелся без векторов и матриц. Сплошной дедушка Пифагор. Если у вас реально неподдельный интерес к этой теме., то я могу вам выслать код. Правда немного придется его в начале изменить. Поскольку координаты считываются из модели. Вам нужно будет создать массив в нужном месте с координатами и потом построчно все перепроверить.
 
Неподдельный интерес уже закончился  :)

А "векторы и матрицы" обычно присутствуют в графических библиотеках, более того, могут считаться прямо на графическом процессоре. В то время как "дедушкины расчеты со сплошными тригонометрическими и показательными функциями" могут сильно притормозиться на больших объемах данных... Но у вас же не динамические расчеты, так что можно даже рассчитывать древневавилонскими методами  :D  
 
Цитата
AndreTM написал:
так что можно даже рассчитывать древневавилонскими методами
Зачооот :D .
Вы правы на все сто, что векторами пожалуй лучше. Просто никто не взялся за эту работу... :( . А сам я не умею "как положено". Пришлось пифагорить. Кстати до сих пор не доделал. .. Уже часа 4 выясняю , как вычислить правильно знак координаты. Координаты правильно а знаки всегда по разному.
 
Дело в том, что так и не понятно, на какую именно плоскость ты "отображаешь" базовые координаты.
Вообще, задача-то в чем состоит? Принудительно пересчитать все базовые координаты точек объекта, своим методом - и дать их другому объекту? Или что?

Скорее всего, в программе где-то имеются дополнительные данные о свойствах "окна отображения" (ну то есть текущего чертежа)... ты предлагаешь поставить SW только ради того, чтобы понять, чего ты недоговариваешь?  :)

Насчет "знаков по-разному" - это как? Или ты на разных наборах данных все время пересчитываешь? Или на разные плоскости проецируешь? Что меняешь-то, если результаты меняются?
Страницы: 1
Наверх