powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм рисования цилиндра
95 сообщений из 95, показаны все 4 страниц
Алгоритм рисования цилиндра
    #39464859
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Подскажите алгоритм рисования цилиндра по 2 точкам и радиусу
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39464864
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уточнение, 3-мерная система координат
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39464929
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По 2-м точкам можно только прямую нарисовать либо отрезок, если точки - его концы.
Окружность - однозначно задаётся только по 3-м.
Эллипс (если цилиндр в проекции, то эллипс - проекция окружности) та же кривая 2-го порядка, что и окружность. Не помню сейчас, может и 3-х не хватит.

Или точки у вас не той системы.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39464930
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksЗдравствуйте!
Подскажите алгоритм рисования цилиндра по 2 точкам и радиусу
построить сетку (mesh) для цилиндра радиуса 1, центр нижнего основания в начале координат,
верхнего - (0,0,1)
потом применить аффинное преобразование(масштабирование+ поворот+ сдвиг)
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39464932
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98По 2-м точкам можно только прямую нарисовать либо отрезок, если точки - его концы.
Окружность - однозначно задаётся только по 3-м.
Эллипс (если цилиндр в проекции, то эллипс - проекция окружности) та же кривая 2-го порядка, что и окружность. Не помню сейчас, может и 3-х не хватит.

Или точки у вас не той системы.

прямая - это нормаль для оснований, очевидно же
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39464987
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksПодскажите алгоритм рисования цилиндра по 2 точкам и радиусу
Я так понимаю, что Вы имеете в виду круглый цилиндр. Поскольку в задаче не уточняется, какой именно из возможных цилиндров следует нарисовать, я бы облегчил себе жизнь и рисовал бы цилиндр, у которого заданные точки являются центрами оснований. Ну а как нарисовать такой цилиндр, совершенно верно подсказал Изопропил.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465001
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы только не стал растрировать образ цилиндра. Если без 3d-движка то рисуется сначала прямоугольник для боковых граней, потом два круга для оснований, с разной заливкой для имитации объема.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465037
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное автор хотел получить нечто вроде:

Где центры центры оснований заданы соотв 2 точками (x1,y1,z1), (x2,y2,z2) и задан радиус R.

Но автор должен нам также сказать с какой точностью надо аппроксимировать боковые поверхности.
(по сути как сильно наш многогранник должен быть похож на цилиндр). Следует ли боковушки
на более мелкие triangle_strip? (Это может быть полезно в играх для иммитации деформации или освещения).
Нужно ли добавлять свойства нормалей? (Реакция на свет)

И самое главное. Каков чортов API юзать? DirectX? OpenGL/WebGL? Unity?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465049
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКаков чортов API юзать? DirectX? OpenGL/WebGL? Unity?
сохранить в любом публичном формате (obj например) вместе с нормалями
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465104
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавная получается гештальт-иллюзия. Интересно, что нужно дорисовать, чтобы она разрешалась.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465229
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилmaytonКаков чортов API юзать? DirectX? OpenGL/WebGL? Unity?
сохранить в любом публичном формате (obj например) вместе с нормалями
Каким образом это поможет автору? Вы еще усложнили ему задачу.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465299
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleks,
вообще-то, алгоритм называется аксонометрическая проекция
=)
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465300
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисЗабавная получается гештальт-иллюзия. Интересно, что нужно дорисовать, чтобы она разрешалась.
а костыли уже пробовали?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465337
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИзопропилпропущено...

сохранить в любом публичном формате (obj например) вместе с нормалями
Каким образом это поможет автору? Вы еще усложнили ему задачу.
пущай матчасть изучает
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465352
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Цилинд это две одинаковые окружности
2. для того что бы отобразить проекцию окружности на плоскость(экран) используют матрицу трансформации(перехода).
т.е. каждую вершину фигуры(в данном случае окружности) перемножают на матрицу трансформации
в результате получают координаты точек фигуры относительно экрана.
3. после того как известны координаты всех точек точек остается отобразить их на экране. Ну и соединить точки линиями.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465786
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем гадать чаво хотел заказчик, может пусть сначала автор закинет эскиз того чё нужно?..
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465791
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и надо знать, невидимые линии рисовать / нет ли? и всё же точки - это что такое: для исходного цилиндра или для его проекции и т.п.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465795
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЯ так понимаю, что Вы имеете в виду круглый цилиндр. тогда уже до кучи и прямой цилиндр, а не Пизанскую башню, но автор, похоже о других не слышал.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465841
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем ответившим по существу, а также тем кто просто поумничал ))

Возможно, я немного не полностью раскрыл задачу.
Учтоняю.

Есть линия, которая задана двумя 3-д точками. Эта линия есть осью цилиндра.
Также задан радиус.
Необходимо получить набор 3д-линий, которыми можно отобразить данный цилиндр.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465845
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksНеобходимо получить набор 3д-линий, которыми можно отобразить данный цилиндр.
Вас не смущает, что их довольно много?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465857
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksСпасибо всем ответившим по существу, а также тем кто просто поумничал ))

Возможно, я немного не полностью раскрыл задачу.
Учтоняю.

Есть линия, которая задана двумя 3-д точками. Эта линия есть осью цилиндра.
Также задан радиус.
Необходимо получить набор 3д-линий, которыми можно отобразить данный цилиндр.
Браток. Я же говорил выше. Не хватает исходных данных. Точность апрокцимации. Сколько
боковушек делать? 10? 100? 1000?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465869
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да дайте уж просто контур - для этого уже всё подсказано, до 2-х эллипсов и до 2-х отрезков. Или пусть спросит что непонятно.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39465952
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleks,

матиматику знаите? Ну так вперёд!!
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466009
iobox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это для окружности:
x = r * cos fi
y = r * sin fi

r - радиус, fi - угол
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466026
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksНеобходимо получить набор 3д-линий, которыми можно отобразить данный цилиндр.
mesh называется
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466039
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iobox, в 3D всегда эллипсы, т.к. постановка наверняка подразумевает 2 различные точки. Хотя необязательно.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466053
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я хз, не делал такого.
Но как мне кажется:

по z = 0; x= cos(i) * r; y=sin(i) * r, получаем набор точек с шагом (Pi * 2) / n, где n количество точек, берем чётное число
затем копируем точки и задаем для них z, получаем наборы точек для 2ух окружностей.
затем соединяем точки парами, берем точку i, i+1, i2 и i2+1 (прямоугольник) и разбиваем его на 2 полигона.
сам я не делал такого, чисто теоритически + еще сверху и снизу треугольники от центра к точкам.
тут главное, чтоб вершины полигонов были выстроены в правильном порядке.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466068
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ещё одну подсказку дам.
Допустим, что 2 точки - это настоящая высота цилиндра. В какой именно проекции он должен быть нарисован:
(*) в ортогональной
( ) в иной

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

Ждём-с дальнейшей постановки и, наконец, эскиза от руки.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466074
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, это сферический цилиндр в вакууме. Для расчёта "базовых" точек всё это похоже на правду, но автору это всё нужно куда-то спроектировать.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466151
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesНо как мне кажется Первое, что я опробовал на ЯВУ на i8086 -- это вращать цилиндр, контур только, со скрытием невидимой части основания простой перерисовкой бесцветным параллелограммом (проекция параллельными прямыми). Даже сейчас помню, потому и придираюсь к ТС.

Что до дилеммы, посоветовать не могу: хранить ли точки "сферического" цилиндра, к-рые затем преобразовать, или зная формулу преобразования, геометрический "состав изделия", фактуру поверхности, модель света и его отражения, делать это на лету. В конце концов, есть же графические примитивы.
Всем успехов!
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466205
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я рисовал 3D tor на Borland Pascal в VGA-mode. С Z-буфером и освещением.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466209
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так топикстартеру - нарисовать нужно или триангуляцию сделать?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466210
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное нам надо прекратить пытки автора. Он сам не знает как ему надо сделать.

Самый простой вариант - ортогональная проекция цилиндра на плоскость XY.
Орт Z игнорируется и рассматривается как глубина экрана.

Правда здесь нужно решить еще одну мелкую проблемку о которой все забывают.
Перевод из мировых координат в экранные. Например цилиндр задан центрами
в (0,0,0), (-3000,-3000,-3000), а экран у нас (стандартный ноутбучный) 1280x720 pix
то соотв мы должны масштабировать хотя-бы более чем в 0.5 раз и двигать центр мировых
координат чтобы цилиндр занял хотя-бы "приличное" положение от наблюдателя
а не в отрицательном квадранте.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466212
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПравда здесь нужно решить еще одну мелкую проблемку о которой все забывают.
не ищи под фонарём проблему - её здесь нет
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466228
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ммм.. срачь получается.

Ну оки. Давайте так. В режиме концепта. Ни слова больше. Только код.

Я начинаю.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
class Point3D {
    
    public final double x,y,z;

    Point3D(double x, double y, double z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
}

abstract class Figure {
    // .... 
}

class Cylinder extends Figure{
    
    public Cylinder(Point3D center1,Point3D center2,double height){
        // .....
    }
        
}

public class Main {
    
    public static void main(String[] args){
        // Init Cylinder object
        Cylinder cylinder = new Cylinder(new Point3D(0.0,0.0,0.0),new Point3D(-3000.0,-2000.0,-5000.0),8000.0);
        // Write mesh to STDOUT like a Point3d list
        
    }

}
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466338
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин Сергей1. Цилинд это две одинаковые окружности
2. для того что бы отобразить проекцию окружности на плоскость(экран) используют матрицу трансформации(перехода).
т.е. каждую вершину фигуры(в данном случае окружности) перемножают на матрицу трансформации
в результате получают координаты точек фигуры относительно экрана.
3. после того как известны координаты всех точек точек остается отобразить их на экране. Ну и соединить точки линиями.

гуглим матчасть типа вот этой , вспоминаем линейку и вперёд
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466470
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столько желающих ответить, не спят, бьют копытом, а ТС как гордая птица.
mayton,
вряд ли Си нужен, заказ на алгоритм был, но степень детализации алгоритма не заявлена. Для каких целей, ещё бы знать ...

Давно уже в школе стереометрию не дают. В принципе ТС не обязан был знать 3Д или благополучно забыть. Там все страхи от надобности создать 3Д-матрицу преобразования, например из углов Эйлера, и как ею пользоваться. Попутно научиться по вектору находить перпендикулярную плоскость. Не зная этого, и разбираться конечно нелегко, я понимаю.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466476
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98mayton,
вряд ли Си нужен, заказ на алгоритм был,
1) где ты Си увидел?
2) алгоритм разумно излагать на каком либо языке программирования
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466519
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упрощаю задачу:
есть линия (100,100,100) - (100,1000,100)
в в крайних точках необходимо нарисовать круги, которые были бы перпендикулярны к вектору линии
пример в картинке прикреплен
можно принять что круги нарисованы набором прямых линий
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466523
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Об этом разговор разве?
Усмотрел в регистрозависимости, но если окажется явой, та же хрень, стреляться не буду)
Да хоть на ассемблере, посмотрите профиль ТСа, и степень разумности бывает разная, иногда образно доходчивей.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466530
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksупрощаю задачу: тут либо цииндр нужен скошенный,
либо, чтобы "которые были бы перпендикулярны к вектору линии", то эллипсы на рисунке д.б. повёрнуты по часовой немного.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466531
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98roleksупрощаю задачу: тут либо цииндр нужен скошенный,
либо, чтобы "которые были бы перпендикулярны к вектору линии", то эллипсы на рисунке д.б. повёрнуты по часовой немного.

совершенно верно, немного неправильно отобразил
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466541
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksупрощаю задачу:
есть линия (100,100,100) - (100,1000,100)
в в крайних точках необходимо нарисовать круги, которые были бы перпендикулярны к вектору линии
пример в картинке прикреплен
можно принять что круги нарисованы набором прямых линийНу вот есть (x0,y0,z0) и (x1,y1,z1). Уравнение плоскости, проходящей через (x0,y0,z0) и перпендикулярной этому отрезку: (x-x0)*(x1-x0)+(y-y0)*(y1-y0)+(z-z0)*(z1-z0)=0
Сфера с центром в (x0,y0,z0) радиуса R: (x-x0)^2+(y-y0)^2+(z-z0)^2=R^2. Пересечение сферы и плоскости дает нужную окружность.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466546
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Да хоть на ассемблере, посмотрите профиль ТСа, и степень разумности бывает разная, иногда образно доходчивей.
от же, а я его к университетскому курсу отправляю, тут же с "Начала" Евклида надо начинать

я вот ЧЗ как синусы, косинусы а, возможно, и умножение с делением дистанционно объяснять :-(
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466551
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)от же, а я его к университетскому курсу отправляю
логичнее к учебнику по OpenGl
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466553
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы не спешил, задан вектор, парллельный оси У, если эта ось вдоль высоты монитора, а мы смотрим "из бесконечности", т.е. проекция на монитор параллельна, то основания вырождаются в отрезок. Вводной недостаточно, да и с диагональным расположением на рисунке надо соспоставить.

Что есть оси координат по отношению к плоскости монитора, это предполагалось высчитывать из рисунка?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466579
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleks,
нарисуйте что есть и что надо например в экселе/опен офис (см. рисунок)
В экселе хотя бы вращать можно.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466592
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466606
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите за столь плотное моё присутствие, просто мои мысли - мои скакуны, самому уже мешает, пока выясняется вопрос с системами координат (может всё же рассказать сверхцель всего этого?).
Звучал вопрос как часто рисовать палки. С места в карьер тоже можно наткнуться на фичи.

Допустим, рисуем равномерно.
Где соблюдать равномерность?
- на экране
- по дуге эллипса
- по дуге исходной окружности.
Каждый вариант требует отличающихся вычислений.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466612
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

на OpenGl/WebGl/Direct3D - рисовал когда-нибудь?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466614
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleks,
Какой конец трубы к нам ближе нижний или верхний ? (там, где 4 кружочка, рис. в посте [20542505] )
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466616
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я - нет
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466627
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) По поводу Си и алгоритмов. Как я и думал - автору нужен алгоритм + реализация.
Голый алгоритм пишется как в умных книжках типа Кормена или Кнута на "птичьем
языке". Смесь модулы или АЯ. И я готов спорить на большое количество пива что
автору такая форма подачи ничем вообще не поможет. Поэтому я привел
фрагмент шаблонного кода на Java. Хотя он очень похож на Си и на С#.

2) В конструкторе я ошибся. Там еще есть радиус.

Код: java
1.
2.
3.
public Cylinder(Point3D center1,Point3D center2,double height,double R){
        // .....
}



И можно опционально добавить точность аппроксимации. Пускай это будет количество
граней (наподобие правильного многоугольника в качестве образующей).

Код: java
1.
2.
3.
public Cylinder(Point3D center1,Point3D center2,double height,double R,int proxyEdges){
        // .....
}



3) По поводу OpenGL. Сейчас - пофиг. Потому что у нас нету mesh цилиндра. А когда mesh будет - тогда
можно будет ее отрисовать через любую либу как через фасад или адаптер.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466628
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
это вопрос к ТСу, чем он будет реализовывать алгоритм - до такой степени подробности и опускаться. Пока ничего неизвестно, ведь не просто же рисунок требуется.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466790
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ можно опционально добавить точность аппроксимации. Пускай это будет количество граней
mayton, по мне нет разницы в эллипсе или многоуг-ке. Будет уравнение эллипса в экранных к-тах - так какая разница кроме скорости, что проектировать на экран. Нужна красота?

В конце понадобится заглушка (матрица) и вектор смещения, чтобы привести наши "исходные" координаты в соответствие с заказчиковыми, и в этом видится проблемка на стороне ТС, возможно вплоть до истечения конечного срока.

Сначала допустим, что наши == ТС.
Допустим, наши - это поворот экранных на 90 вокруг Х по часовой:
Z ---) -Y
Y --) Z
X --) X
где экранные:
Z - на нас, (0, 0) в левом верхнем, Y - вниз?
Можно для простоты потом параметризовать ур-ние эллипса и сделать шаг равномерным по параметру, а палки рисовать - никакого GL потом не будет нужно.

Лично я до сих пор в догадках, для чего и в каком виде автору это нужно, т.к. сначала: дайте алгоритм, а потом: вот вам вертикальное бревно, нужен взгляд на него всегда немного сверху/снизу, вне зависимости от высоты бревна.

Ну вот же почти готовое ТЗ. Кто-нить продолжать будет? лично я не буду кодить, формулы если только неспеша изобразить.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466818
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Нужна красота?
сетка нужна, а не уравнение. Топикстартер об этом писал
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466826
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466856
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю упростить задачу:
есть окружность, заданная центром ( 3Д ) и радиусом
построенная по оси х-у
также есть 2 точки (линия), одна из которых совпадает с центром окружности.
Необходимо повернуть окружность чтоб она стала перпендикулярна линии.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466880
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksПредлагаю упростить задачу:
есть окружность, заданная центром ( 3Д ) и радиусом
построенная по оси х-у
также есть 2 точки (линия), одна из которых совпадает с центром окружности.
Необходимо повернуть окружность чтоб она стала перпендикулярна линии.
исходная задача несколько понятнее была
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466892
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да угол же между прямой и плоскостью
Рассказать как найти?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466906
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

какой угол и что он даст?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466947
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с той поправкой, что a, b, c уже даны в уравн-ии (1)
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39466996
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В азарте и забыл, что Т2 есть центр Окр., никаких t не надо, всё проще.
Одна ось на новой плоскости - диаметр Окр, к-рый перпендик. прямой
Другая ось - перпендик. первой.
Обе выходят из центра Окр.
Вопросы?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467026
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98maytonИ можно опционально добавить точность аппроксимации. Пускай это будет количество граней
mayton, по мне нет разницы в эллипсе или многоуг-ке. Будет уравнение эллипса в экранных к-тах - так какая разница кроме скорости, что проектировать на экран. Нужна красота?

В конце понадобится заглушка (матрица) и вектор смещения, чтобы привести наши "исходные" координаты в соответствие с заказчиковыми, и в этом видится проблемка на стороне ТС, возможно вплоть до истечения конечного срока.

Сначала допустим, что наши == ТС.
Допустим, наши - это поворот экранных на 90 вокруг Х по часовой:
Z ---) -Y
Y --) Z
X --) X
где экранные:
Z - на нас, (0, 0) в левом верхнем, Y - вниз?
Можно для простоты потом параметризовать ур-ние эллипса и сделать шаг равномерным по параметру, а палки рисовать - никакого GL потом не будет нужно.

Лично я до сих пор в догадках, для чего и в каком виде автору это нужно, т.к. сначала: дайте алгоритм, а потом: вот вам вертикальное бревно, нужен взгляд на него всегда немного сверху/снизу, вне зависимости от высоты бревна.

Ну вот же почти готовое ТЗ. Кто-нить продолжать будет? лично я не буду кодить, формулы если только неспеша изобразить.
Посмотрите на картинку 20542781 которую ТС изобразил. Это-же вырожденный случай.
Цилиндр расположен горизонтально. Нет... конечно на формулу это не очень влияет. Просто
если нужна диаграмма типа в Excel рисуют. То.. там даже нету перспективы. И освещение
там упрощенное. По сути... рисуется контур. И заливается градиентом. Только одно видимое
основание - заливается цветом.

Тащем-та я вангую что все что мы кодим ТС-у не очень нужно. Да пофиг...

Мыже тут - альтруисты.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467068
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще децл кода. Hey, ТС у тебя есть вопросы по коду?


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    public Cylinder(@Nonnull Point3D center1,@Nonnull Point3D center2, double height, double R, int proxyEdges){
        if (isEquals(center1,center2)) 
            throw new IllegalArgumentException("The centers are equals!");
        
        if (height < 0.0)
            throw new IllegalArgumentException("The height cannot be negative!");
        
        if (R < 0.0)
            throw new IllegalArgumentException("The radius cannot be negative!");
        
        if (proxyEdges <= 5)
            throw new IllegalArgumentException("The proxyEdges must be greather than 5");
        
        double step = 2.0 * PI / proxyEdges;
        
        // Add implementation here...
    }
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467077
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
это фрагмент моего рисунка, я понял так, что нам пояснялось что надо получить, и я замял вопрос, направление значяения не имело. Зато имело место безразличие к наличию перспективы -- сммотрим всегда из бесконечности.
Из этих же соображений в последней постановке оси тоже будут без перспективы, но они и не рисуются.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467105
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМы же тут - альтруистыНесмотря на затронутые тайные струны души я не гонюсь за очередным велосипедом и всё это время намекал. Постановка задачи приятнее))
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467120
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98maytonМы же тут - альтруистыНесмотря на затронутые тайные струны души я не гонюсь за очередным велосипедом и всё это время намекал. Постановка задачи приятнее))
Я тоже никуда не спешу. Я для себя пытаюсь понять границы человеческого любопытства и лени.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467193
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПотому что у нас нету mesh цилиндра

в исходниках three.js всё есть и достаточно прозрачно

https://threejs.org/docs/#api/geometries/CylinderGeometry

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
/**
 * @author mrdoob / http://mrdoob.com/
 * @author Mugen87 / https://github.com/Mugen87
 */

import { Geometry } from '../core/Geometry';
import { BufferGeometry } from '../core/BufferGeometry';
import { Float32BufferAttribute } from '../core/BufferAttribute';
import { Vector3 } from '../math/Vector3';
import { Vector2 } from '../math/Vector2';

// CylinderGeometry

function CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {

	Geometry.call( this );

	this.type = 'CylinderGeometry';

	this.parameters = {
		radiusTop: radiusTop,
		radiusBottom: radiusBottom,
		height: height,
		radialSegments: radialSegments,
		heightSegments: heightSegments,
		openEnded: openEnded,
		thetaStart: thetaStart,
		thetaLength: thetaLength
	};

	this.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );
	this.mergeVertices();

}

CylinderGeometry.prototype = Object.create( Geometry.prototype );
CylinderGeometry.prototype.constructor = CylinderGeometry;

// CylinderBufferGeometry

function CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {

	BufferGeometry.call( this );

	this.type = 'CylinderBufferGeometry';

	this.parameters = {
		radiusTop: radiusTop,
		radiusBottom: radiusBottom,
		height: height,
		radialSegments: radialSegments,
		heightSegments: heightSegments,
		openEnded: openEnded,
		thetaStart: thetaStart,
		thetaLength: thetaLength
	};

	var scope = this;

	radiusTop = radiusTop !== undefined ? radiusTop : 20;
	radiusBottom = radiusBottom !== undefined ? radiusBottom : 20;
	height = height !== undefined ? height : 100;

	radialSegments = Math.floor( radialSegments ) || 8;
	heightSegments = Math.floor( heightSegments ) || 1;

	openEnded = openEnded !== undefined ? openEnded : false;
	thetaStart = thetaStart !== undefined ? thetaStart : 0.0;
	thetaLength = thetaLength !== undefined ? thetaLength : 2.0 * Math.PI;

	// buffers

	var indices = [];
	var vertices = [];
	var normals = [];
	var uvs = [];

	// helper variables

	var index = 0;
	var indexArray = [];
	var halfHeight = height / 2;
	var groupStart = 0;

	// generate geometry

	generateTorso();

	if ( openEnded === false ) {

		if ( radiusTop > 0 ) generateCap( true );
		if ( radiusBottom > 0 ) generateCap( false );

	}

	// build geometry

	this.setIndex( indices );
	this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
	this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
	this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );

	function generateTorso() {

		var x, y;
		var normal = new Vector3();
		var vertex = new Vector3();

		var groupCount = 0;

		// this will be used to calculate the normal
		var slope = ( radiusBottom - radiusTop ) / height;

		// generate vertices, normals and uvs

		for ( y = 0; y <= heightSegments; y ++ ) {

			var indexRow = [];

			var v = y / heightSegments;

			// calculate the radius of the current row

			var radius = v * ( radiusBottom - radiusTop ) + radiusTop;

			for ( x = 0; x <= radialSegments; x ++ ) {

				var u = x / radialSegments;

				var theta = u * thetaLength + thetaStart;

				var sinTheta = Math.sin( theta );
				var cosTheta = Math.cos( theta );

				// vertex

				vertex.x = radius * sinTheta;
				vertex.y = - v * height + halfHeight;
				vertex.z = radius * cosTheta;
				vertices.push( vertex.x, vertex.y, vertex.z );

				// normal

				normal.set( sinTheta, slope, cosTheta ).normalize();
				normals.push( normal.x, normal.y, normal.z );

				// uv

				uvs.push( u, 1 - v );

				// save index of vertex in respective row

				indexRow.push( index ++ );

			}

			// now save vertices of the row in our index array

			indexArray.push( indexRow );

		}

		// generate indices

		for ( x = 0; x < radialSegments; x ++ ) {

			for ( y = 0; y < heightSegments; y ++ ) {

				// we use the index array to access the correct indices

				var a = indexArray[ y ][ x ];
				var b = indexArray[ y + 1 ][ x ];
				var c = indexArray[ y + 1 ][ x + 1 ];
				var d = indexArray[ y ][ x + 1 ];

				// faces

				indices.push( a, b, d );
				indices.push( b, c, d );

				// update group counter

				groupCount += 6;

			}

		}

		// add a group to the geometry. this will ensure multi material support

		scope.addGroup( groupStart, groupCount, 0 );

		// calculate new start value for groups

		groupStart += groupCount;

	}

	function generateCap( top ) {

		var x, centerIndexStart, centerIndexEnd;

		var uv = new Vector2();
		var vertex = new Vector3();

		var groupCount = 0;

		var radius = ( top === true ) ? radiusTop : radiusBottom;
		var sign = ( top === true ) ? 1 : - 1;

		// save the index of the first center vertex
		centerIndexStart = index;

		// first we generate the center vertex data of the cap.
		// because the geometry needs one set of uvs per face,
		// we must generate a center vertex per face/segment

		for ( x = 1; x <= radialSegments; x ++ ) {

			// vertex

			vertices.push( 0, halfHeight * sign, 0 );

			// normal

			normals.push( 0, sign, 0 );

			// uv

			uvs.push( 0.5, 0.5 );

			// increase index

			index ++;

		}

		// save the index of the last center vertex

		centerIndexEnd = index;

		// now we generate the surrounding vertices, normals and uvs

		for ( x = 0; x <= radialSegments; x ++ ) {

			var u = x / radialSegments;
			var theta = u * thetaLength + thetaStart;

			var cosTheta = Math.cos( theta );
			var sinTheta = Math.sin( theta );

			// vertex

			vertex.x = radius * sinTheta;
			vertex.y = halfHeight * sign;
			vertex.z = radius * cosTheta;
			vertices.push( vertex.x, vertex.y, vertex.z );

			// normal

			normals.push( 0, sign, 0 );

			// uv

			uv.x = ( cosTheta * 0.5 ) + 0.5;
			uv.y = ( sinTheta * 0.5 * sign ) + 0.5;
			uvs.push( uv.x, uv.y );

			// increase index

			index ++;

		}

		// generate indices

		for ( x = 0; x < radialSegments; x ++ ) {

			var c = centerIndexStart + x;
			var i = centerIndexEnd + x;

			if ( top === true ) {

				// face top

				indices.push( i, i + 1, c );

			} else {

				// face bottom

				indices.push( i + 1, i, c );

			}

			groupCount += 3;

		}

		// add a group to the geometry. this will ensure multi material support

		scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );

		// calculate new start value for groups

		groupStart += groupCount;

	}

}

CylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype );
CylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry;


export { CylinderGeometry, CylinderBufferGeometry };

...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467213
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, я посмотрел исходник поверхностно.

Я не знаю что в нем есть. Но я скажу чего в нем нет.
В нем нет координат двух центров. Возможно данный нам в использование
замечательный исходник на JavaScript является частью более крупного
программного продукта где есть стек преобразований типа basic-transforms -> world-transforms.

И через basic-transforms мы можем эмулировать 2 центра.
Но это все хорошо для программного продукта типа Blender, 3dMax, AutoCad,
но для такого мелкого ТЗ как у автора - избыточно ИМХО.

Это примерно - как решать школьную задачку о двух сближающихся поездах
через диф-уравнения. Вроде-бы и можно ... но школьник не будет впечатлён
решением да и избыточно.

ИМХО
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467381
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ нем нет координат двух центров. Возможно данный нам в использование
замечательный исходник на JavaScript является частью более крупного
программного продукта где есть стек преобразований типа basic-transforms -> world-transforms.
конечно есть полный набоп преобразовании
и генерация сеток для базовых фигур.
maytonИ через basic-transforms мы можем эмулировать 2 центра.
сколько пафоса - длина отрезка интересует - не более.

maytonЭто примерно - как решать школьную задачку о двух сближающихся поездах
через диф-уравнения
задача сетку построить,камеру поставить - озвучена явно,
без источника света - скучно


это же введение в 3D моделирование, какие к чертям дифуры?
не вижу избыточности.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467392
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилзадача сетку построить,камеру поставить - озвучена явно,
без источника света - скучно

это же введение в 3D моделирование, какие к чертям дифуры?
не вижу избыточности.
Где камера? Автор вроде не говорил ничего о камерах?

Давайте хоть сетку построим.

А этот javascript-исходник ... он что на выходе дает? Я так и не понял.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467403
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98roleks, я ожидал подобный вопрос.

Плоскость, перпенд-я прямой, можно задать уравнением (1)
0 = х /(x2-х1) + y /(y2-y1) +z /(z2-z1),
в к-ром коэфф-ты abc можно найти, потребовав пересечения с плоскостью окр-сти. В этом случаче с координатной плоскостью (ХУ)
То есть z=0

прямая, заданная парой точек T1/2= (х1/2, y1/2, z1/2),
пересекает плоскость, в к-рой лежит Окр(х0, у0, R),
в некой точке T3=(х3, у3, z3) = T1 +t*(T2-T1) (2)

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

А можно по прямой пересечения плоск-й достроить ось координат, найти м-цу M преобразования коорд-т и тогда по любой точке круга можно вычислить коорд-ты её проекции.

За мелкие неточности ссори.

для того чтоб построить матрицу преобразования, необходима еще 1 ось. ГШде ее взять?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467406
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как найти недостающий мне вектор PU ?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467408
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ссылка не вставилась
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467409
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467419
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пыщ.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
class Cylinder extends Figure{
    
    public List<Point3D> point3DS = new ArrayList<>();

    public Cylinder(@Nonnull Point3D center1,@Nonnull Point3D center2, double height, double R, int proxyEdges){
        if (isEquals(center1,center2))
            throw new IllegalArgumentException("The centers are equals!");

        if (height < 0.0)
            throw new IllegalArgumentException("The height cannot be negative!");

        if (R < 0.0)
            throw new IllegalArgumentException("The radius cannot be negative!");

        if (proxyEdges <= 5)
            throw new IllegalArgumentException("The proxyEdges must be greather than 5");

        double step = 2.0 * PI / proxyEdges;

        // Draw primitive cylinder without basic transformations with (0,0,0), (0,0,height) centers
        // And rad = R

        for (double v = 0.0; v < 2.0 * PI; v += step) {
            double x = R * cos(v);
            double y = R * sin(v);
            point3DS.add(new Point3D(x, y, 0.0));
            point3DS.add(new Point3D(x, y, height));
        }
        
        // Apply basic transforms to become cylinder with center1, center1 
        
        // ....
        
    }
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467424
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА этот javascript-исходник ... он что на выходе дает? Я так и не понял.
mesh-объект
maytonГде камера? Автор вроде не говорил ничего о камерах?
суслика видишь?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467427
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилmaytonА этот javascript-исходник ... он что на выходе дает? Я так и не понял.
mesh-объект
maytonГде камера? Автор вроде не говорил ничего о камерах?
суслика видишь?
Ладно. Не получается у нас сегодня диалог.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467428
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
 public Cylinder(@Nonnull Point3D center1,@Nonnull Point3D center2, double R, int proxyEdges){
        if (isEquals(center1,center2))
            throw new IllegalArgumentException("The centers are equals!");

        double height = Point3D.distance(center1,center2);

...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467431
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЛадно. Не получается у нас сегодня диалог.
это не страшно, на след день продолжим.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467515
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksдля того чтоб построить матрицу преобразования, необходима еще 1 ось. ГШде ее взять? А ось цилиндра? она перпендик-на новой плоскости.

Мне очень стыдно за вчерашний поток сознания, пост [20543812] в топку, щас исправлю, а потом схожу застрелиться.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467527
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо поста [20543812]

Плоскость, перпенд-я прямой, можно задать уравнением (1)
0 = (х-x0)*(x1-х0) + (y-y0)*(y1-y0) + (z-z0)*(z1-z0),
где прямая, заданная парой точек T1= (х1, y1, z1) и T0(х0, у0, z0)
пересекает плоскость, в к-рой лежит Окр(х0, у0, z0, R),

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

Но для цилиндра кроме М понадобится ещё и вектор сдвига, имхо.

Уравнение (1) выражает факт, что все вектора вида (х-х0, ...) перпендикулярны вектору (х1-х0), что эквивалентно выражению "их скалярное произведение=0". Скалярное же пр-ние вычисляется как сумма парных произвед-й координат, что и написано в (1) - этот текст для контроля.
За мелкие неточности ссори.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467578
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил ( сегодня, 00:36 ) на след день продолжим отсыпаются))

Сдаётся мне, что в матлабе это всё есть, а прогать там неимоверно удобней, запись как в екторном, так и в покомпонентном виде и есть интеграция с экселом как он-лайн, так и через АПИ, на днях гляну в своей древней версии.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467878
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://jsfiddle.net/t8447wb1/1/

В отладчике все прекрасно видно как работает отображение
в функции THREE.CylinderBufferGeometry() рассчитываются вершины цилиндра в зависимости от входных параметром
в функции renderer.render() идет отображение геометрии на экран (проекция вершин на плоскость)

смотри задавай вопросы =).
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39467999
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со ссылкой на Тяпничный бенчмарк CPU (part-1)

Этот-же Vector можно использовать как Point3d и как отрезок в трехмерном пространстве
и применять к нему набор операций таких как sum, prod, vector-prod e.t.c.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
@Immutable
public final class Vector {

    public final double x, y, z;

    public Vector(double x, double y, double z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public Vector sum(Vector r) {
        return new Vector(x + r.x, y + r.y, z + r.z);
    }

    public Vector prod(double r) {
        return new Vector(x * r, y * r, z * r);
    }

    public double sprod(Vector r) {
        return x * r.x + y * r.y + z * r.z;
    }

    public Vector vprod(Vector r) {
        return new Vector(y * r.z - z * r.y,
                z * r.x - x * r.z,
                x * r.y - y * r.x);
    }

    public Vector norm() {
        return this.prod(1.0 / sqrt(this.sprod(this)));
    }

}
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39468034
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton this.prod(1.0 / sqrt(this.sprod(this))); Где предлагаешь обрабатывать деление на 0 ?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39468040
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98roleksдля того чтоб построить матрицу преобразования, необходима еще 1 ось. ГШде ее взять? А ось цилиндра? она перпендик-на новой плоскости имел ввиду исходно заданный отрезок.
Длину только сделать =1 и направление , чтобы все оси работали по "правилу буравчика". Ну или векторное произведение 2-х других осей (если опять не спутал) - д.б. тот же результат.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39468054
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98mayton this.prod(1.0 / sqrt(this.sprod(this))); Где предлагаешь обрабатывать деление на 0 ?
Давай очертим проблему сначала. Пока толком кода нет то и нет проблемы.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39468057
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А над какой постановкой толком работаешь? по мере запросов ТСа или по своей?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39468069
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я позволяю потоку сознания течь в произвольном направлении. Собственно как и во всех
тяпничных топиках.
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39468210
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
цилиндр то нарисовали?
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39468351
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цилиндр рисовать - брызги шампанского нравятся?
для получения навыков только если, всё давно придумано, нужны лишь бОльшая доступность и фреймворки.

Всё же нулевой вектор является штатной ситуацией, поэтому типа этого
Код: java
1.
2.
3.
4.
5.
    #define EPS 1.0e-13
    public Vector norm() {
        double spr= this.sprod(this);
        return (spr <= EPS ? 0.0 : this.prod(1.0 / sqrt(spr)) );
    }

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

Класс пополнить
методом длина вектора,
методом или свойством вектор нулевой длины
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39468385
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Класс пополнить
методом длина вектора,
методом или свойством вектор нулевой длины
Ого бл... ну мне ничего не остается как взять под козырек и сказать Sir, Yes, Sir! И рвануть исполнять...
...
Рейтинг: 0 / 0
Алгоритм рисования цилиндра
    #39468397
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это в копилку ТЗ ))
...
Рейтинг: 0 / 0
95 сообщений из 95, показаны все 4 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм рисования цилиндра
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]