Изменение матрицы от предназначенного для правой руки до предназначенной для левой руки системы координат

не был ли веб-сайт/сервис QA/теста, который позволит Вам определить веб-страницу, которой Вы хотели быть представленными в определенном браузере (IE, Firefox, версия x, y, z Safari), и они отправят снимок по почте назад Вам'.

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

27
задан Mark 11 August 2009 в 21:38
поделиться

3 ответа

Вам действительно нужно изображение в виде байт [] ? Что именно вы ожидаете в байте [] - полное содержимое файла изображения, закодированное в любом формате, в котором находится файл изображения, или значения пикселей RGB?

Другие ответы здесь покажут вам, как читать файл в байт [] . Ваш байт [] будет содержать точное содержимое файла, и вам нужно будет его декодировать, чтобы делать что-либо с данными изображения.

Стандартный API Java для чтения (и записи) изображений - это ImageIO API, который вы можете найти в пакете javax.imageio . Вы можете прочитать изображение из файла с помощью всего одной строчки кода:

BufferedImage image = ImageIO.read(new File("image.jpg"));

Это даст вам BufferedImage , а не байт [] . Чтобы получить данные изображения, вы можете вызвать getRaster () в BufferedImage . Это даст вам объект Raster , у которого есть методы для доступа к данным пикселей (у него есть несколько методов getPixel () / getPixels () ).

Найдите в документации API для javax.imageio.ImageIO , java.awt.image.BufferedImage , java.awt.image.Raster и т. Д.

ImageIO по умолчанию поддерживает ряд форматов изображений: JPEG, PNG, BMP, WBMP и GIF. Можно добавить поддержку большего количества форматов (вам понадобится плагин, реализующий интерфейс поставщика услуг ImageIO).

См. Также следующее руководство: Мне нужно экспортировать модель из Blender, в которой ось z направлена ​​вверх, в OpenGL, где ось y обращена вверх.

Для каждой координаты (x, y, z) это просто; просто поменяйте местами значения y и z: (x, z, y).
Поскольку я поменял местами все значения y и z, любую матрицу, которую я использую, также нужно перевернуть, чтобы она имела такой же эффект.

После долгих поисков я в конце концов нашел решение на gamedev :

Если ваша матрица выглядит так:

{ rx, ry, rz, 0 }  
{ ux, uy, uz, 0 }  
{ lx, ly, lz, 0 }  
{ px, py, pz, 1 }

Чтобы изменить ее слева направо или справа налево, переверните ее следующим образом:

{ rx, rz, ry, 0 }  
{ lx, lz, ly, 0 }  
{ ux, uz, uy, 0 }  
{ px, pz, py, 1 }
26
ответ дан 28 November 2019 в 05:21
поделиться

Поскольку это похоже на домашнее задание; Я дам вам подсказку: что вы можете сделать, чтобы сделать определитель матрицы отрицательным?

Далее (лучший совет): Поскольку вы уже знаете, как выполнять это преобразование с отдельными векторами, не так ли? думаете, что сможете сделать это с базовыми векторами, которые охватывают преобразование, которое представляет матрица? (Помните, что матрицу можно рассматривать как линейное преобразование, выполняемое на кортеже единичных векторов)

-8
ответ дан 28 November 2019 в 05:21
поделиться

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

Если вы умножаете слева (например: Ax = x ', где A - матрица, а x' преобразованная точка), вам просто нужно поменять местами второй и третий столбцы. Если вы умножаете справа (например: xA = x '), вам нужно поменять местами вторую и третью строки.

Если ваши точки являются векторами-столбцами, то вы находитесь в первом сценарии.

1
ответ дан 28 November 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: