Название: Подогнать прямоугольник под картинку Отправлено: Igors от Ноябрь 27, 2009, 20:19 Добрый вечер
Задачка совсем простая но почему-то не могу сообразить как сделать :) Есть прямоугольник в 3D пространстве, он задается 4-мя точками (x, y, z) для каждой. Корректная геометрия гарантируется - все 4 точки лежат в одной плоскости и площадь прямоугольника не равна нулю. Каждая точка имеет также координаты пикселей (u, v) картинки(имедж) которая должна быть нарисована на прямоугольнике. Задача: имедж может иметь неиспользуемые (100% черные) края. Для имеджа это выглядит так -------------------------- | | | -------- | | | | | | | | | | -------- | | | | | --------------------------- Вопрос: как теперь подсчитать 3D координаты каждой точки прямоугольника чтобы он вместил только "содержательную часть" имеджа? Спасибо Название: Re: Подогнать прямоугольник под картинку Отправлено: Павел_F. от Ноябрь 27, 2009, 20:37 Читал раз 20... Ничего не понял.
Картинка это 2D... прямоугольник в 3D... Что с кем совместить надо? Нужно чтобы проекция 3D прямоугольника на плоскость с 2D картинкой совпадала со значащей частью 2D картинки? Название: Re: Подогнать прямоугольник под картинку Отправлено: Igors от Ноябрь 27, 2009, 20:43 Читал раз 20... Ничего не понял. Представьте себе какую-нибудь пластиковую карточку. На ней что-то нарисовано но есть белые (неиспользуемые) края. Берем ножницы и обрезаем ненужные края. Какой теперь стала карточка?Картинка это 2D... прямоугольник в 3D... Что с кем совместить надо? Нужно чтобы проекция 3D прямоугольника на плоскость с 2D картинкой совпадала со значащей частью 2D картинки? Название: Re: Подогнать прямоугольник под картинку Отправлено: Павел_F. от Ноябрь 27, 2009, 20:47 Представьте себе какую-нибудь пластиковую карточку. На ней что-то нарисовано но есть белые (неиспользуемые) края. Берем ножницы и обрезаем ненужные края. Какой теперь стала карточка? 1) Меньше чем была2) В той же плоскости что и была раньше 3) Осталась прямоугольником( не может картинка овальной быть) Причем тут 3D все равно не понятно. Название: Re: Подогнать прямоугольник под картинку Отправлено: Igors от Ноябрь 27, 2009, 20:57 1) Меньше чем была Только при том, что карточка в 3D пространстве и каждый ее угол имеет (x, y, z). Как посчитать эти координаты после обрезки?2) В той же плоскости что и была раньше 3) Осталась прямоугольником( не может картинка овальной быть) Причем тут 3D все равно не понятно. Название: Re: Подогнать прямоугольник под картинку Отправлено: Павел_F. от Ноябрь 27, 2009, 21:31
Название: Re: Подогнать прямоугольник под картинку Отправлено: Igors от Ноябрь 27, 2009, 21:39
Название: Re: Подогнать прямоугольник под картинку Отправлено: Павел_F. от Ноябрь 27, 2009, 22:00 Но все равно координаты верщин (ткперь x. y, 0) и координаты пикселей имеджа (для каждого угла) - разные вещи. Как посчитать что хотели? абстрагируясь от остального и рассматривая уже двумерную задачу:
Название: Re: Подогнать прямоугольник под картинку Отправлено: Igors от Ноябрь 27, 2009, 22:05 Но все равно координаты верщин (ткперь x. y, 0) и координаты пикселей имеджа (для каждого угла) - разные вещи. Как посчитать что хотели? абстрагируясь от остального и рассматривая уже двумерную задачу:
Название: Re: Подогнать прямоугольник под картинку Отправлено: Павел_F. от Ноябрь 27, 2009, 22:26 Так подожди... Так надо миллиметры в пиксели пересчитать?
Название: Re: Подогнать прямоугольник под картинку Отправлено: Igors от Ноябрь 27, 2009, 22:44 Так подожди... Так надо миллиметры в пиксели пересчитать? Ну типа того :) Одну систему координат в другую. Конечно, есть соответствие для каждого углаНазвание: Re: Подогнать прямоугольник под картинку Отправлено: spectre71 от Ноябрь 27, 2009, 22:51 Добрый вечер Задачка совсем простая но почему-то не могу сообразить как сделать :) Есть прямоугольник в 3D пространстве, он задается 4-мя точками (x, y, z) для каждой. Корректная геометрия гарантируется - все 4 точки лежат в одной плоскости и площадь прямоугольника не равна нулю. Каждая точка имеет также координаты пикселей (u, v) картинки(имедж) которая должна быть нарисована на прямоугольнике. Задача: имедж может иметь неиспользуемые (100% черные) края. Для имеджа это выглядит так -------------------------- | | | -------- | | | | | | | | | | -------- | | | | | --------------------------- Вопрос: как теперь подсчитать 3D координаты каждой точки прямоугольника чтобы он вместил только "содержательную часть" имеджа? Спасибо Вопросы: 1) Координаты целочиcлены(поскольку пикселы) ? 2) Правильно ли я понимаю задачу? - Переформулирую: - Имеем прямоугольник A с определенными валидными координатами в 3D - Имеем проекцию A из 3D в 2D, т.е имеем координаты проекции A в 2D - Имеем прямоугольник B сторого внутри A (включая границы A) - Имеем координаты B в плоскости прямоугольника A Задача определить координаты прямоугольника B в 2D прекции прямоугольника A Название: Re: Подогнать прямоугольник под картинку Отправлено: Igors от Ноябрь 27, 2009, 23:30 Вопросы: 1) Нет, координаты числа с точкой1) Координаты целочиcлены(поскольку пикселы) ? 2) Правильно ли я понимаю задачу? - Переформулирую: - Имеем прямоугольник A с определенными валидными координатами в 3D - Имеем проекцию A из 3D в 2D, т.е имеем координаты проекции A в 2D - Имеем прямоугольник B сторого внутри A (включая границы A) - Имеем координаты B в плоскости прямоугольника A Задача определить координаты прямоугольника B в 2D прекции прямоугольника A 2) На все вопросы ответ "да" - просто давайте уточним термин "проекция". Под этим обычно понимается "проекция на одну из плоскостей координат" (в изометрии). Например - front view (вид спереди). Отбрасываем z, видим только x, y - тор view (вид сверху) Отбрасываем y, видим только x, z - side view (вид сбоку) Отбрасываем x, видим только y, z Во всех случаях из 3D координат получаются 2D изометрические (без перспективы) координаты которые могут быть нарисованы в пикселях. Нет проблем пересчитать координаты для проекции любой произвольной плоскости. В любом случае "проекция" подразумевает "одна из координат отбрасывется/игнорируется". Вот только как это поможет в решении данной задачи? :) Название: Re: Подогнать прямоугольник под картинку Отправлено: SimpleSunny от Ноябрь 28, 2009, 08:54 Если я правильно (хотя есть сомнения) понял, то:
1. Считаем количество мм в одном пикселе k = sqrt(sqr(x2 - x1) + sqr(y2 - y1) + sqr(z2 - z1)) / sqrt (sqr(u2 - u1) + sqr(v2 - v1)) 2. Считаем единичный вектор направления стороны m {(x2 - x1) / |m|, (y2 - y1) / |m|, (z2 - z1) / |m|} 3. Узнаем координаты обрезанного изображения. К примеру одна из сторон (0, 0) (100, 0) -> (20, 0)(90, 0). 4. for (i = 20; i <= 90; ++i) { in_mm = i * k; in_mm_x = mx * in_mm + x1; in_mm_y = my * in_mm + y1; in_mm_z = mz * in_mm + z1; } или (к 4му пункту) можно узнать начальное смещение (из-за обрезания края картинки) и просто на каждом шаге прибавлять шаг (k). Название: Re: Подогнать прямоугольник под картинку Отправлено: spectre71 от Ноябрь 28, 2009, 19:00 Может проще получить матрицу преобразования(поворота) для точек (u,v) плоскости в точки (x,y,z) пространства:
Если ничего не путаю: Код: |a11 a12 a13| Что-то слишком просто получилось. Наверное фигня. Вот ссылочка на всякий случай http://www.graphicon.ru/oldgr/grafor/gr_help/chapter_8_1_1.htm (http://www.graphicon.ru/oldgr/grafor/gr_help/chapter_8_1_1.htm) Название: Re: Подогнать прямоугольник под картинку Отправлено: Igors от Ноябрь 28, 2009, 21:51 Здравствуйте
Сегодня утром проснулся и за полчаса все сделал. Наверное вчера был неудачный день :) Все просто. 1) Общая часть Нужно определить 2 системы координат: одну для пикселей, другую для 3D точек. Вычислить относительные координаты в пиксельной системе и использовать их в 3D. Например, был имедж (0, 0)(100, 100) а после обрезки стал (20, 20)(75, 80) - значит относительные координаты новых точек (0.2, 0.2)(0.75, 0.8 ) 2) Данные Нужно определить операторы и писать в векторах иначе (если каждый раз повторять вычисления для 2 или 3 координат) никакой головы не хватит Код: struct Vec3D { 3) Пусть точка задана так Код: struct CPoint { Тогда Код: // mPixNew посчитано из имеджа для всех 4 точек теперь надо найти их mPosNew |