Russian Qt Forum
Июнь 03, 2024, 18:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: qrand()  (Прочитано 23253 раз)
Fat-Zer
Гость
« Ответ #15 : Май 18, 2012, 05:33 »

Все же лучше озвучить как генерируются точки
по моему очевидно...
Код:
A = (1,0,0);
B = (0,1,0);
C = (0,0,0);
D= (1,1,0);
AB = Line(AB)
p = randPoint(C,D);
// сравниваем (0,0,0) и p по одну сторону прямой AB лежат или по разные.
if(dist(p, AB) * dist(C, AB) <= 0 ) {
    return p;
} else {
    return semetrick(p, AB);
}
Эта или обратная - все равно масштабы по осям неравны. А значит такое матричное преобразование не сохраняет пропорций, и на заданном треугольнике точки не будут лежать равномерно.  

Пример: пусть дан треугольник (0,0,0) (0,10,0) (1,0,0), т.е. просто вытянутый по Y. Тогда вблизи оси X точки будут стоять густо, а около точки Y = 10 пусто
матчасть стоит повторить... любое аффинное преобразование сохраняет соотношение площадей. => вероятность появления на ней точки. Для равномерного распределения этого точно достаточно.... для остальных - стоит подумать, но тут проблем не должно возникнуть... только надо параметры распределения преобразовывать...
« Последнее редактирование: Май 18, 2012, 05:45 от Fat-Zer » Записан
DmitryM
Гость
« Ответ #16 : Май 18, 2012, 06:58 »

Какие "эти", точки-то как генерировать?
Школота. Читай до просветления http://www.sernam.ru/book_dm.php?id=6
Записан
mutineer
Гость
« Ответ #17 : Май 18, 2012, 10:59 »

Также неплохо прокомментировать как она применяется - точка множится на строку или на столбец? (полагаю на строку).

Матрица трансформации применяется как любая другая матрица афинного преобразования - вектор, описывающий точку, умножается на всю матрицу. В результате получается новый вектор, описывающий точку после преобразования
« Последнее редактирование: Май 18, 2012, 11:01 от mutineer » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Май 18, 2012, 11:36 »

Матрица трансформации применяется как любая другая матрица афинного преобразования - вектор, описывающий точку, умножается на всю матрицу. В результате получается новый вектор, описывающий точку после преобразования
Так а что значит "умножается на матрицу"? Это может быть "вектор-строка множится на столбец (матрицы)" или "вектор-столбец множится на строку". Каждый как хочет так и делает, поэтому правила надо оговаривать.

Школота. Читай до просветления http://www.sernam.ru/book_dm.php?id=6
Учитель, а что я должен там читать чтобы "просветлиться" ?  Улыбающийся

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

по моему очевидно...
Код:
A = (1,0,0);
B = (0,1,0);
C = (0,0,0);
D= (1,1,0);
AB = Line(AB)
p = randPoint(C,D);
// сравниваем (0,0,0) и p по одну сторону прямой AB лежат или по разные.
if(dist(p, AB) * dist(C, AB) <= 0 ) {
    return p;
} else {
    return semetrick(p, AB);
}
Не слабое у Вас "очевидно"  Улыбающийся Улыбающийся   Ладно, если хотите - озвучу более простое решение
Записан
mutineer
Гость
« Ответ #19 : Май 18, 2012, 11:41 »

Матрица трансформации применяется как любая другая матрица афинного преобразования - вектор, описывающий точку, умножается на всю матрицу. В результате получается новый вектор, описывающий точку после преобразования
Так а что значит "умножается на матрицу"? Это может быть "вектор-строка множится на столбец (матрицы)" или "вектор-столбец множится на строку". Каждый как хочет так и делает, поэтому правила надо оговаривать.

"умножается на матрицу" - это значит перемножение двух матриц. Одна из них 4х4 - матрица трансформации. вторая из них 4х1 - матрица (еще можно назвать вектор-столбец) координат точки. Вся первая матрица умножается на всю вторую, никаких "каждый как хочет". Прочитай про перемножение матриц внимательно. Так все афинные преобразования делаются
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Май 18, 2012, 12:17 »

"умножается на матрицу" - это значит перемножение двух матриц. Одна из них 4х4 - матрица трансформации. вторая из них 4х1 - матрица (еще можно назвать вектор-столбец) координат точки. Вся первая матрица умножается на всю вторую, никаких "каждый как хочет". Прочитай про перемножение матриц внимательно. Так все афинные преобразования делаются
Давайте прильнем к авторитетному для Вас первоисточнику. Вот как применяется QMatrix
Код
C++ (Qt)
#define MAPINT(x, y, nx, ny) \
{ \
   qreal fx = x; \
   qreal fy = y; \
   nx = qRound(_m11*fx + _m21*fy + _dx); \
   ny = qRound(_m12*fx + _m22*fy + _dy); \
}
 
Здесь вектор-строка умножается на столбец матрицы (QMatrix "справа"). Fat-Zer в посте #12 сконструировал матрицу, и я так вижу, там надо множить на строку. Ничего "неправильного" в этом нет - если мы поменяем в матрице строки со столбцами и помножим на столбец - результат будет тот же. Не стоит понимать все слишком буквально Улыбающийся
Записан
mutineer
Гость
« Ответ #21 : Май 18, 2012, 12:21 »

"умножается на матрицу" - это значит перемножение двух матриц. Одна из них 4х4 - матрица трансформации. вторая из них 4х1 - матрица (еще можно назвать вектор-столбец) координат точки. Вся первая матрица умножается на всю вторую, никаких "каждый как хочет". Прочитай про перемножение матриц внимательно. Так все афинные преобразования делаются
Давайте прильнем к авторитетному для Вас первоисточнику. Вот как применяется QMatrix

Это что еще за авторитетный для меня первоисточник? И причем тут QMatrix? Я тебе говорю про то, как афинные преобразования, записанные в виде матрицы трансформации применяются вообще в графике. И умножается одна матрица на другую. Полностью. А не на какую-то отдельную строку/столбец из нее
« Последнее редактирование: Май 18, 2012, 12:23 от mutineer » Записан
Bepec
Гость
« Ответ #22 : Май 18, 2012, 12:41 »

mutineer, а есть ли какая то разница?

Умножится n столбцов на n строк по алгоритму, или же умножится матрица на матрицу по алгоритму (то же самое, только скрытое от нас) ?
Записан
mutineer
Гость
« Ответ #23 : Май 18, 2012, 12:43 »

mutineer, а есть ли какая то разница?

Умножится n столбцов на n строк по алгоритму, или же умножится матрица на матрицу по алгоритму (то же самое, только скрытое от нас) ?

Вроде как Igors собирается множить только на одну строку/столбец из матрицы трансформации. Иначе не было бы вопроса "точка множится на строку или на столбец?" (в единственном числе ведь написано)
Записан
V1KT0P
Гость
« Ответ #24 : Май 18, 2012, 12:44 »

Пример: нужно подсчитать площадь пересечения 2 фигур - круга и прямоугольника. Площади самих фигур находятся очень просто, а вот площадь пересечения - трудно вывести формулы. А для более сложных фигур формул может вообще не быть. В то же время генерируя случайные числа (Монте-Карло) найти площадь пересечения очень просто (пусть с какой-то погрешностью)
В каком это смысле сложно? Делаем алгоритм который режет пересечение на простые фигуры. А для простых фигур площади уже считаются через известные формулы. Складываем площади и получаем самую точную площадь.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #25 : Май 18, 2012, 12:50 »

Это что еще за авторитетный для меня первоисточник? И причем тут QMatrix? Я тебе говорю про то, как афинные преобразования, записанные в виде матрицы трансформации применяются вообще в графике. И умножается одна матрица на другую. Полностью. А не на какую-то отдельную строку/столбец из нее
Да понятно что не на один/одну  Улыбающийся  Обозначим

P - трансформируемая точка
M - матрица
x - операция умножения матриц по правилам математики: строки первой множатся на столбцы второй

Преобразование MxP конечно не равно PxM, но это совсем не значит что одно "правильное" а др нет - зависит то того как создавалась/задумывалась матрица M. Вторая форма пожалуй более популярна
Записан
mutineer
Гость
« Ответ #26 : Май 18, 2012, 12:53 »

Да понятно что не на один/одну  Улыбающийся

"точка множится на строку или на столбец?" -  и как из этой фразы понятно что не на одну строку?
Вопрос исчерпан
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Май 18, 2012, 13:08 »

mutineer, а есть ли какая то разница?
Да, есть, матричное произведение "некоммутативно" (от перестановки сомножителей результат меняется)

Вроде как Igors собирается множить только на одну строку/столбец из матрицы трансформации. Иначе не было бы вопроса "точка множится на строку или на столбец?" (в единственном числе ведь написано)
Блин, ну вот охота человеку попридираться. А как я скажу? "Вектор множится на первый столбец - получается новый х, потом исходный вектор множится на второй столбец - получается новый y...". Давайте считать что все здесь достаточно грамотны.

В каком это смысле сложно? Делаем алгоритм который режет пересечение на простые фигуры. А для простых фигур площади уже считаются через известные формулы. Складываем площади и получаем самую точную площадь.
А на какие простые? Ну разрезали Вы на миллион квадратикоа - и что, стало легче найти площадь пересечения каждого с кругом? Улыбающийся  А для особо резвых найдется напр пересечение шара с кубом. Заметим что с Монте-Карликом все остается столь же простым, и любой лох может написать за 5 мин
Записан
mutineer
Гость
« Ответ #28 : Май 18, 2012, 13:10 »

Вроде как Igors собирается множить только на одну строку/столбец из матрицы трансформации. Иначе не было бы вопроса "точка множится на строку или на столбец?" (в единственном числе ведь написано)
Блин, ну вот охота человеку попридираться. А как я скажу? "Вектор множится на первый столбец - получается новый х, потом исходный вектор множится на второй столбец - получается новый y...". Давайте считать что все здесь достаточно грамотны.

Сказать же очень просто - вектор множится на матрицу)))
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Май 18, 2012, 13:20 »

Сказать же очень просто - вектор множится на матрицу)))
Так у Вас получается наоборот, матрица множится на вектор

"умножается на матрицу" - это значит перемножение двух матриц. Одна из них 4х4 - матрица трансформации. вторая из них 4х1 - матрица (еще можно назвать вектор-столбец) координат точки.
Так матрица "слева" (MxP), строки матрицы множатся на вектор-столбец. В общем, Вы сами все запутали  Улыбающийся
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.134 секунд. Запросов: 22.