Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Задачки любителям 3Д

1250  1 2 все
AlexNek патриот21.06.21 21:36
AlexNek
NEW 21.06.21 21:36 

Вот в первый раз столкнулся, пока не придумал решение. Нужно чисто для личных целей.

1. Есть прямая заданная двумя точками (x,y,z). Нужно нарисовать еще одну параллельную прямую н расстоянии а в плоскости xy.

2. Есть лого которое надо наложить на сферу так что бы оно было видно с любой стороны. Тут видимо надо делить по 120 градусов на три оси и в эти треугольники вписывать. Только вот как текстуру такую сгенерить?

3. С материалом для мешей еще не разобрался до конца. Есть там Diffuse Color и Emissive Color. Основной цвет я присваиваю в Emissive Color, а второй подбираю. А формула есть для второго цвета?

#1 
wasja-de завсегдатай21.06.21 22:07
21.06.21 22:07 
в ответ AlexNek 21.06.21 21:36
1. Есть прямая заданная двумя точками A(x1,y1,z1), B(x2,y2,z2). Нужно нарисовать еще одну параллельную прямую на расстоянии а в плоскости xy.

Если перпендикуляры от A и B на плоскость не равны друг другу, то параллельную прямую с одинаковым расстоянием до прямой, проходящей через A и B провести нельзя. Может Вы как-то по-другому плоскость хотели задать?


2. Есть лого которое надо наложить на сферу так что бы оно было видно с любой стороны. Тут видимо надо делить по 120 градусов на три оси и в эти треугольники вписывать. Только вот как текстуру такую сгенерить?

Не, криво как-то. Может можно узнать вектор откуда смотрят, и двигать центр лого на нужное место?

#2 
MrSanders коренной житель21.06.21 22:07
NEW 21.06.21 22:07 
в ответ AlexNek 21.06.21 21:36
1. Есть прямая заданная двумя точками (x,y,z). Нужно нарисовать еще одну параллельную прямую н расстоянии а в плоскости xy.

Мнэ... По геометрии что в школе было? Что за "плоскость xy"?

2. Есть лого которое надо наложить на сферу так что бы оно было видно с любой стороны.

С любой стороны чего? Было видно что? Решение - минимизирую лого до одного пикселя и заливаю всю поверхность сферы этим пикселем. Видно отовсюду. Задача решена.


#3 
Murr патриот21.06.21 22:58
Murr
NEW 21.06.21 22:58 
в ответ AlexNek 21.06.21 21:36

нарисовать еще одну параллельную прямую н расстоянии а

-----

Уравнение прямой

k1X + k2Y + k3Z = 0


сдвигаешь куда надо:

k1(X+a) + k2(Y+a) + k3(Z+a) = 0

#4 
akidervish постоялец22.06.21 10:14
NEW 22.06.21 10:14 
в ответ Murr 21.06.21 22:58, Последний раз изменено 22.06.21 10:15 (akidervish)
Уравнение прямой
k1X + k2Y + k3Z = 0

Это не уравнение прямой, а уравнение плоскости.



Но задача 1) сформулирована не ясно. Там, видимо, опечатка в условии, т.к. даже с точки зрения русской грамматики не ясно, что хотели спросить:


еще одну параллельную прямую н расстоянии а в плоскости xy.

Вторая прямая должна целиком лежать в плоскости ортогональной Оz и проходящей через (0,0,0)? Если изначальная прямая не параллельна этой плоскости,
то, как написал вася, это сделать невозможно.

#5 
Murr патриот22.06.21 10:52
Murr
NEW 22.06.21 10:52 
в ответ akidervish 22.06.21 10:14

Упссс... а ведь подзабыл... действительно - плоскость... и для определения прямой задавать их надо две штуки...

Ну либо к канонической форме переходить = (х-х0)/к1 = (y-y0)/k2=(z-z0)/k3...


Блин, давнен'ко не пользовался аналитической геометрией...

#6 
akidervish постоялец22.06.21 11:16
NEW 22.06.21 11:16 
в ответ Murr 22.06.21 10:52, Последний раз изменено 22.06.21 11:22 (akidervish)

Прямую можно задать параметрически, через параметр t в векторном виде.



Если \vec{X} = (X,Y,Z),



then: \vec{X}(t) = (\vec{X}_1 - \vec{X}_2) * t + \vec{X}_2 - equation defining the line passing through the points \vec{X_1}, \vec{X}_2
(ends of the vectors for different t \in (-\inf, +\inf) define this line).



You can shift with a vector \Delta \vec{X}_0 in any direction:



\vec{X}'(t) = (\vec{X}_1 - \vec{X}_2) * t + \vec{X}_2 +\Delta \vec{X}_0, such that |\Delta \vec{X}_0| = \sqrt{x_0^2 + y_0^2 + z_0^2} = a.


NOTE: such a shift of the plane:

k1(X+a) + k2(Y+a) + k3(Z+a) = 0

results in the shift by the vector of length = a * \sqrt(k1^2 + k2^2 + k3^2) != a (the distance between planes will not be, in general, equal to a).

#7 
AlexNek патриот22.06.21 11:50
AlexNek
NEW 22.06.21 11:50 
в ответ wasja-de 21.06.21 22:07
Может Вы как-то по-другому плоскость хотели задать?

А вообще непонятно как, совершенно неправильно было. Нужен видимо еще какой то вектор указывающий направление, потому как можно целый цилиндр параллельных прямых сделать возле центральной.


Не, криво как-то.

Почему? Во всех примерах накладывают текстуру на объект. Да и следить за вращением не хочется. Можно ведь не только сцену вращать но и конкретный объект.

#8 
AlexNek патриот22.06.21 11:54
AlexNek
NEW 22.06.21 11:54 
в ответ MrSanders 21.06.21 22:07
По геометрии что в школе было?

Спросили бы еще, что в детском саду на обед давали смущ Ни разу еще ничего подобного не нужно было.

Вот что имелось в виду


минимизирую лого до одного пикселя

И как различать различные лого, если они только по форме отличаются?

#9 
akidervish постоялец22.06.21 12:03
NEW 22.06.21 12:03 
в ответ AlexNek 22.06.21 11:54, Последний раз изменено 22.06.21 12:14 (akidervish)

Ваша изначальная кривая в середине?



И все три лежат в плоскости z = 0?



Тогда просто:



прямая проходит через точки Х1 = (х1,y1, 0) and X2 = (x2, y2, 0).
X(t) = (X1 - X2) t + X2.



N = (X1 - X2) / |X1 - X2|



|X| = sqrt(x^2 + y^2 + z^2)



denote coordinates of N = (n1, n2, 0), n1^2 + n^2 = 1



N' = (-n2, n1, 0)



X' (t) = (X1 - X2) t + X2 + a * N'/2
X"(t) = (X1 - X2) t + X2 - a * N'/2
in vector form:



параметрические уравнения ваших прямых (сдвинуты от центральной на +/-а/2 в ортогональном к серединной прямой направлении внутри z=0 плоскости).


Если вы прямые задаете двумя точками, просто возьмите два разных t, e.g. t=0, 1.

#10 
AlexNek патриот22.06.21 12:17
AlexNek
NEW 22.06.21 12:17 
в ответ akidervish 22.06.21 10:14
сформулирована не ясно.

совершенно верно смущ

Проблема заключается в том, что я не знаю как именно нарисовать эту прямую. Варинтов то дофига.

Возможно можно сказать так: в начальном положении камеры должно быть видно максимальное количество прямых.

Если исключить прямые лежащие на оси Z, то все дополнительные прямые должны проецироваться на плоскость проходящую через оси X,Y (Как эту плоскость назвать?)

#11 
akidervish постоялец22.06.21 12:19
NEW 22.06.21 12:19 
в ответ AlexNek 22.06.21 12:17
через оси X,Y (Как эту плоскость назвать?)

z=0, uravnenie zadajushee etu ploskost' :-)

#12 
AlexNek патриот22.06.21 12:25
AlexNek
NEW 22.06.21 12:25 
в ответ akidervish 22.06.21 12:03
Ваша изначальная кривая в середине?

Можно считать и так. Мне известны именно эти две точки. Нарисовать нужно или одну или две(без центральной) или три прямых. Для этого есть дополнительные условия.


И все три лежат в плоскости z = 0?

Нет, просто так удобнее было отрисовать. Располагаться прямые могут как угодно.


Тогда просто:

Спасибо, вечером гляну.

#13 
MrSanders коренной житель22.06.21 16:15
NEW 22.06.21 16:15 
в ответ AlexNek 22.06.21 12:25

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

Или что-то недодумано или одно из двух.

#14 
AlexNek патриот22.06.21 16:40
AlexNek
NEW 22.06.21 16:40 
в ответ MrSanders 22.06.21 16:15
или мы о проекциях на плоскость z=0 говорим...

Скорее это. Просто для картинки было наглядней не вносить 3ю координату.

Камера смотрит по умолчанию примерно так, как показано. Поэтому желательно, что бы было видно как можно больше линий, вероятно линии нужно располагать вдоль вектора совпадающего с осью Y.

А то меня тут 3Д заразили, сижу с линиями уже мучаюсь. Пока только одну линию осилил.

C6H8O6


#15 
wasja-de завсегдатай22.06.21 17:02
NEW 22.06.21 17:02 
в ответ AlexNek 22.06.21 16:40
А то меня тут 3Д заразили, сижу с линиями уже мучаюсь. Пока только одну линию осилил. C6H8O6


Вам кроме основ геометрии хорощо было бы еще химию подучить. В химии при нарисовке двойной связи принято учитывать расположение Пи-орбиталей - они должны быть над и под плоскостью, где лежит плоскость, в которой находятся оба отрезка, символизирующие двойную связь.


В принципе там ничего страшного, и погуглив и внимательно поизучав то, что есть на ключевые слова Уравнение Шредингера, приближение Борна Опенгеймера, методы Хартри-Фока, s, p, d, f орбитали. Но вот как Вы без знания алгоритмов хотя бы молекулярной механики сможете эту информацию получать, ума не приложу. Кстати, в Пабчеме сплош и рядом ошибки в такой визуализации.


#16 
AlexNek патриот22.06.21 17:37
AlexNek
NEW 22.06.21 17:37 
в ответ wasja-de 22.06.21 17:02
сможете эту информацию получать

А у меня и не стоит задача ее получать смущ

Достаточно того, что могу стибрить из SDF Pubchema

Я не собираюсь делать софт для химиков, мне интересно изучить что-то новое в программировании. В данном случае - это Blazor для веба с НЕТ 5.0.

Я поставил себе задачу нарисовать в 3Д относительно произвольную молекулу. Разноцветные шарики разного диаметра с одиночными связями уже получаются без проблем по стандартному описанию.

Правда в SDF не нашел информацию о размере и цвете атомов. Ну и не все поля еще раскодировал.

Теперь вот следующий шаг - сделать 2х и 3х связи.


хорошо было бы еще химию подучить

В принципе можно, но не вижу куда это в дальнейшем это можно применить. Да и всё изучить всё равно невозможно.


в Пабчеме сплош и рядом ошибки в такой визуализации.

Больше я пока не знаю на что можно ориентироваться. Как откроете официально ваш сайт смогу на него равняться.


принято учитывать расположение Пи-орбиталей

Если данная информация отсутствует в описании, то для меня она как то и не существует. Это как ТЗ, чего нет в ТЗ, то не делаем спок

#17 
AlexNek патриот22.06.21 17:39
AlexNek
NEW 22.06.21 17:39 
в ответ wasja-de 22.06.21 17:02

Может еще подскажете красивые молекулы для демо страниц?

Пока выбрал воду и Benzene.

#18 
wasja-de завсегдатай22.06.21 23:41
NEW 22.06.21 23:41 
в ответ AlexNek 22.06.21 17:37
Если данная информация отсутствует в описании, то для меня она как то и не существует. Это как ТЗ, чего нет в ТЗ, то не делаем спок

не, почему-же, я довольно понятно рассказал в моем предыдущем ответе как из SDF или MOL можно получить информацию в какой плоскости должны лежать отрезки у двойной связи, только Вы не прислушались, или не захотели почему-то. Пабчем эту информацию иногда с ошибкой считает, мне не понятно почему. Мне играться в 3Д через WebGL пока нужды нет, так как квантовомеханические расчеты у меня еще не закончены, пока есть только результаты молекулярной механики, а их можно и псевдо3Д без теней нарисовать как у меня сделано.

#19 
AlexNek патриот23.06.21 11:18
AlexNek
NEW 23.06.21 11:18 
в ответ wasja-de 22.06.21 23:41
понятно рассказал в моем предыдущем ответе как из SDF или MOL можно получить информацию

Очень понятно - Уравнение Шредингера, приближение Борна Опенгеймера...

при том что SDF вообще не упоминалось смущ

Это как бы если кто то хотел сделать калькулятор, а ему - изучи циклы, ветвления и немного программирования, делать там нефиг.

Да и даже если я это изучу, проблема то всё равно останется, параллельные прямые к химии вроде отношения не имеют.


У нас подход разный к задачам.

Я вот не буду разработчику автокада рекомендовать изучить моторы и их принцип действия.

#20 
1 2 все