Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
-12 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 246

Координаты от Vector3f в сторону Vector3f на расстоянии float

14.01.2021, 13:24. Показов 4687. Ответов 10

Студворк — интернет-сервис помощи студентам
OpenGL, LWJGL 3.2.3 , Java
Есть два вектора и длина аля:
Java
1
2
3
Vector3f begin;
Vectro3f end;
float length
Нужно получить координаты точки(в Vector3f), если точка находится от begin на расстоянии length в сторону end. Подскажите как это вычислить? Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.01.2021, 13:24
Ответы с готовыми решениями:

Округление FLOAT в меньшую сторону
Всем привет. Такой вот вопрос! Как округлить Float в меньшую сторону void __fastcall TForm1::Button1Click(TObject *Sender) { FLOAT...

Округление float числа в меньшую сторону с двумя знаками
Привет! Есть числа вида 8,8889324. Как имея подобное число вывести 8,88 ? Функции round или number_format округляют число до 8,89. Проект...

Случайные координаты на заданном расстоянии от точки
Есть некое 3х мерное пространство, обусловленное координатами X Y Z. Есть координатная точка: X1 = 8 Y1 = -13 Z1 = 120 ...

10
Модератор
Эксперт Java
 Аватар для alecss131
2843 / 1352 / 403
Регистрация: 11.08.2017
Сообщений: 4,320
Записей в блоге: 2
14.01.2021, 13:41
Лучший ответ Сообщение было отмечено EugeneV как решение

Решение

EugeneV,

Не по теме:

Тема к opengl отношения не имеет, тут чистая геометрия


по идее как-то так
Java
1
2
3
4
5
6
7
8
9
10
11
Vector3f begin = new Vector3f(0.0f, 0.0f, 0.0f);
Vector3f end = new Vector3f(5.0f, 0.0f, 0.0f);
float length = 1.0f;
Vector3f vec = new Vector3f();
end.sub(begin, vec); //находим координаты вектора, конец минус начало
vec.normalize(); // нормализуем, так как важно только направление
vec.mul(length); // умножаем на нужную длинну
vec.add(begin); // прибавляем координаты начала
System.out.println(begin);
System.out.println(end);
System.out.println(vec);
0
-12 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 246
14.01.2021, 15:51  [ТС]
Java
1
2
end.sub(begin, vec); //находим координаты вектора, конец минус начало
vec.normalize();// нормализуем, так как важно только направление
Если теперь я хочу новую точку(построенную до этого относительно Begin) переместить в полученное направление то что что я должен сделать с
Java
1
Vector3f newPoint = new Vector3f(begin.x + 10,begin.y + 10,begin.z);
?

Добавлено через 1 минуту
Пока изучаю данные вопросы. Не понимаю просто что делает normalize.

Добавлено через 32 минуты
И еще вопрос где в LWJGL 3.2.3 элементы аля цилиндр и т.п.?
0
Модератор
Эксперт Java
 Аватар для alecss131
2843 / 1352 / 403
Регистрация: 11.08.2017
Сообщений: 4,320
Записей в блоге: 2
14.01.2021, 16:15
Цитата Сообщение от EugeneV Посмотреть сообщение
что делает normalize
нормализует нормаль, делает чтобы длин вектора была равна 1, то есть делит каждую координату на длину вектора

Цитата Сообщение от EugeneV Посмотреть сообщение
элементы аля цилиндр и т.п.?
у него как часть есть вот эта библиотека, там параметрические фигуры
XML
1
2
3
4
5
<dependency>
    <groupId>org.lwjgl</groupId>
    <artifactId>lwjgl-par</artifactId>
    <version>3.2.3</version>
</dependency>
Добавлено через 29 секунд
Цитата Сообщение от EugeneV Посмотреть сообщение
Если теперь я хочу новую точку(построенную до этого относительно Begin) переместить в полученное направление то что что я должен сделать с
не понял...
0
-12 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 246
14.01.2021, 16:52  [ТС]
Задам новый вопрос взамен старого. Конечный результат это цилиндр.
1.Я строю круг по точкам вокруг "Vector3f begin".
Java
1
2
3
4
5
6
7
Vector3f begin = ...
double x = begin.x + radius * Math.cos(angle);
double y = begin.y + radius * Math.sin(angle);
double z = begin.z;
Vector3d point = new Vector3d(x,y,z);
...
Vector3d[] points ...
points это массив точек круга вокруг центра begin
То есть грубо говоря вокруг(вдоль) оси z.

2. У меня также есть Vector3f direction (направление). Я хочу повернуть все края своего круга в сторону направления, при этом центр begin остается на месте(центр поворота). Как это сделать?

Добавлено через 2 минуты
Мысль в том, что изучение lwjgl-par займет время. Я уже хочу лепить 3д деталюшки из простых примитивных объектов.
0
Модератор
Эксперт Java
 Аватар для alecss131
2843 / 1352 / 403
Регистрация: 11.08.2017
Сообщений: 4,320
Записей в блоге: 2
14.01.2021, 16:58
EugeneV,

Не по теме:

вообще новый вопрос, новая тема


если рисуете на opengl, то просто создайте матрицу модели и в шейдерах умножайте на нее
нечто такое как основа для изучения
Java
1
2
Matrix4f model = new Matrix4f();
model.lookAt(begin, direction, up);
можно и до отрисовки умножить
Java
1
2
Vector4f p = new Vector4f(point.x, point.y, point.z, 0);
p.mul(model);
вектор up это вектор направления вверх, по идее можно поставить (0,1,0) если ось Y вверх
4 координата в 0 чтобы не перемещать, гомогенные координаты в помощь
0
Модератор
Эксперт Java
 Аватар для alecss131
2843 / 1352 / 403
Регистрация: 11.08.2017
Сообщений: 4,320
Записей в блоге: 2
15.01.2021, 00:05
Лучший ответ Сообщение было отмечено EugeneV как решение

Решение

Цитата Сообщение от EugeneV Посмотреть сообщение
изучение lwjgl-par займет время
5 минут времени и использование примеров с сайта по ссылке
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
import static org.lwjgl.util.par.ParShapes.*;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
 
import org.lwjgl.util.par.ParShapesMesh;
 
public class Test {
    
    public static void main(String[] args) {
        new Test().run();
    }
 
    private void run() {
        ParShapesMesh cylinder = par_shapes_create_cylinder(30, 3); //создание примитива
        //получение данных
        int np = cylinder.npoints();
        FloatBuffer points = cylinder.points(np); //вершины
        int nt = cylinder.ntriangles();
        IntBuffer triangles = cylinder.triangles(nt); // индексы
        FloatBuffer normals = cylinder.normals(np); // нормали
        par_shapes_rotate(cylinder, 1.57f, new float[]{1, 0, 0}); //вращение вокруг оси x на 1.57 радиана
        par_shapes_translate(cylinder, 0, 0, 3); // премещение на 3 вдоль оси z
        //повторить получение данных
    }
}
FloatBuffer и Intbuffer без проблем скармливаются opengl через lwjgl, а вот в джаву вытащить данные из них немного проблемнее
1
-12 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 246
15.01.2021, 09:42  [ТС]
Спасибо огромное, это вообще шикарно и просто

Добавлено через 1 минуту
А текстурные координаты в нем никак не получить?

Добавлено через 33 минуты
Затупил, сам нашел

Добавлено через 26 минут
Беда в том что на цилиндр не ложатся текстуры, он черный и частично не отрисовывается(
0
-12 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 246
15.01.2021, 09:48  [ТС]
Поправил, текстуры ложатся, но фигура кривая все равно, чего делать?
Миниатюры
Координаты от Vector3f в сторону Vector3f на расстоянии float  
0
-12 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 246
15.01.2021, 10:07  [ТС]
ParShapes.par_shapes_create_cylinder(6, 10);

Добавлено через 18 минут
Какой должен стоять DrawMode?
0
Модератор
Эксперт Java
 Аватар для alecss131
2843 / 1352 / 403
Регистрация: 11.08.2017
Сообщений: 4,320
Записей в блоге: 2
15.01.2021, 11:47
EugeneV, я поохже немного ошибся в коде, там надо числа полученные умножать на 3, так как там это число вершин и треугольников, то есть каждый элемент состоит из 3 частей
Java
1
2
3
4
5
6
7
ParShapesMesh cube = par_shapes_create_cube();
int np = 3 * cube.npoints();
FloatBuffer points = cube.points(np);
int nt = 3 * cube.ntriangles();
IntBuffer triangles = cube.triangles(nt);
FloatBuffer normals = cube.normals(np);
FloatBuffer texture = cube.tcoords(np);
И у куба есть приписка Generates points for a cube that fits in the unit sphere. Texture coordinates and normals are not generated.
Для генерации нормалей надо добавить
Java
1
2
3
ParShapesMesh cube = par_shapes_create_cube(); //создание примитива
par_shapes_unweld(cube, true);
par_shapes_compute_normals(cube);
Тогда смысл индексов теряется и еще я заметил что после например поворота примитива буферы сами обновляются
Текстуры хоть получить и можно но это такое дело, что генерировать развертку процедурно не тривиальная задачка и для сложных форм надо делать руками

Добавлено через 3 минуты
У цилиндра есть и текстуры и нормали. Для текстур np надо умножать на 2, в ide у этой библиотеки есть документация, разобраться можно, там написано если где то не будет нормалей и текстур
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2021, 11:47
Помогаю со студенческими работами здесь

Найти координаты точек, находящихся на максимальном расстоянии
program record5;{найти координаты точек, находящихся на максимальном расстоянии}; type Coord = record x: real; y:...

Координаты точки, находящейся на заданном расстоянии от отрезка
Доброго времени суток, форумчане. Имеется отрезок AB. Необходимо найти координаты точки D, находящейся на заданном расстоянии от отрезка...

Найти координаты точки на отрезке при известном расстоянии до неё
Есть отрезок с известными координатами начала и конца, допустим А(х1, у1) и B(x2, y2). Как найти координаты точки удалённой от B на...

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

Наити наибольшую сторону треугольника, если заданы координаты вершин
Составить программу, которая находит наибольшее сторону треугольника, если заданы координаты вершин. (x1,y1),(x2,y2),(x3,y3).Вычисление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru