Re[12]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: DIMEDROLL Украина  
Дата: 18.02.09 14:24
Оценка:
Здравствуйте, MBo, Вы писали:

MBo>Здесь A B C D E F- это коэффициенты уравнения общего вида для конических сечений (которое приводилось в скобках выше)


MBo>Из этих данных уже можно вытащить все параметры эллипса. Например, наклон оси Tg(fi)=B/(A-C)


Хорошо. А как узнать вершины, фокусы и длины радиусов эллипса? Мне нужны формулы или книга...
Re[2]: Эллипс вписанный в параллелограмм. Нужна книга или фо
От: Кодт Россия  
Дата: 18.02.09 14:45
Оценка:
К>- эллипс с уравнением 1/xx+1/yy=1 (окружность)

В этом месте меня проглючило... почему, не знаю сам. Вместо эллипса гиперболу получил

Было
— окружность xx+yy=1

Стало
— эллипс xx*(1-ss) + yy*ss = 1

Ну а дальше как с гусём.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re[13]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: MBo  
Дата: 19.02.09 05:26
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Хорошо. А как узнать вершины, фокусы и длины радиусов эллипса? Мне нужны формулы или книга...


Охо-хо
http://mathworld.wolfram.com/Ellipse.html
Re[10]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: VovaMulder1983  
Дата: 18.03.09 13:47
Оценка:
Здравствуйте, MBo, Вы писали:

MBo>Окружность, вписанная в квадрат, имеет уравнение (в общем виде для конических сечений Ax^2+Bxy+Cx^2+Dx+Ey+F=0, иногда B,D,E с коэффициентом 2 пишут)

MBo>x^2+y^2-x-y-1/4=0
MBo>или в матричном виде
MBo>[x y 1] * [CRCL] * [x y 1]^T = 0 (^T — транспозиция)
MBo>где СRCL = (1 0 -1/2)(0 1 -1/2)(-1/2 -1/2 1/4)
MBo>аффинное преобразование переводит уравнение в
MBo>[x y 1] * [AFF] * [CRCL] * [AFF]^T * [x y 1]^T = 0
MBo>произведение трех матриц в середине даст матрицу E, которую я посчитал в Maple, выписывать ее не буду, а сразу извлеку из нее параметры уравнения конического сечения
MBo>A=bx^2+by^2
MBo>B=2*(bx*cx+by*cy)
MBo>C=cx^2+cy^2
MBo>D=-bx-by
MBo>E=-cx-cy
MBo>F=1/4
MBo>Из этих данных уже можно вытащить все параметры эллипса. Например, наклон оси Tg(fi)=B/(A-C)
MBo>Но это уже самостоятельно..

Интересно, а как у Вас получилось так элегантно разложить уравнение окружности на матричное произведение? И более общий вопрос — как уравнение кривой (допустим, общее 2-го порядка) преобразовать аффинными преобразованиями, т.е. получить новое уравнение? Если можно, то укажите источник
Re[11]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: MBo  
Дата: 18.03.09 14:29
Оценка:
Здравствуйте, VovaMulder1983, Вы писали:

VM> — как уравнение кривой (допустим, общее 2-го порядка) преобразовать аффинными преобразованиями, т.е. получить новое уравнение?

Так это как раз и сделано. Матрица (CRCL в данном случае):
A B/2 D/2
B/2 C E/2
D/2 E/2 F

(в скане книги Роджерса она приведена с опечаткой)



VM>> Если можно, то укажите источник


Прямого источника нет, идеи разложения из Роджерса — Математические основы машинной графики и, возможно, что-то из Schneider P.J., Eberly D.H. Geometric tools for computer graphics. Eberly еще пописывает в news-группу comp.graphics.algorithms
Re[12]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: VovaMulder1983  
Дата: 18.03.09 14:46
Оценка:
Здравствуйте, MBo, Вы писали:

Спасибо за матрицу разложения, но Вы не ответили, как разложить уравнение, имея такую матрицу. Насколько я понял из Вашего примера, то уравнение f(x,y) с матрицей разложения М приобретает следующий матричный вид

MBo>[x y 1] * [М] * [x y 1]^T = 0


А для того, чтобы подействовать на уравнение f(x,y) афинными преобразованиями и получить новое уравнение f'(x,y), Вы приводите следующую запись

MBo>[x y 1] * [AFF] * [М] * [AFF]^T * [x y 1]^T = 0


Вот, как она получилась? Я понимаю так: [AFF] здесь уместно, т.к. она собственно и есть афф.пр., а вот почему тут [AFF]^T — мне не ясно. Объясните, плиз, или киньте ссылку на источник
Re[13]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: MBo  
Дата: 18.03.09 18:20
Оценка:
Здравствуйте, VovaMulder1983, Вы писали:

VM>Здравствуйте, MBo, Вы писали:


VM>Спасибо за матрицу разложения, но Вы не ответили, как разложить уравнение, имея такую матрицу. Насколько я понял из Вашего примера, то уравнение f(x,y) с матрицей разложения М приобретает следующий матричный вид


MBo>>[x y 1] * [М] * [x y 1]^T = 0


VM>А для того, чтобы подействовать на уравнение f(x,y) афинными преобразованиями и получить новое уравнение f'(x,y), Вы приводите следующую запись


MBo>>[x y 1] * [AFF] * [М] * [AFF]^T * [x y 1]^T = 0


VM>Вот, как она получилась? Я понимаю так: [AFF] здесь уместно, т.к. она собственно и есть афф.пр., а вот почему тут [AFF]^T — мне не ясно. Объясните, плиз, или киньте ссылку на источник


Вот так если сгруппировать, должно быть понятнее
( [x y 1] * [AFF] ) * [М] * ( [AFF]^T * [x y 1]^T ) = 0
первая скобка — вектор-строка координат после преобразования, а последняя — он же транспонированный (вектор-столбец) (по свойству (A*B)^T = B^T*A^T)
Re[14]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: VovaMulder1983  
Дата: 19.03.09 12:54
Оценка:
Здравствуйте, MBo, Вы писали:

MBo>Вот так если сгруппировать, должно быть понятнее

MBo>( [x y 1] * [AFF] ) * [М] * ( [AFF]^T * [x y 1]^T ) = 0
MBo>первая скобка — вектор-строка координат после преобразования, а последняя — он же транспонированный (вектор-столбец) (по свойству (A*B)^T = B^T*A^T)

Спасибо, я уже догнал + Роджерс очень помог
Re[14]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: VovaMulder1983  
Дата: 19.03.09 15:11
Оценка:
Здравствуйте, MBo, Вы писали:

MBo>Пусть одна вершина параллелограмма A находится в начале координат (реальные координаты проще добавить в конце), смежные с ней B и С имеют координаты (bx,by) и (cx, cy).

MBo>Тогда аффинное преобразование, переводящее единичный квадрат с углом в начале координат в данный параллелограмм, описывается матрицей
MBo>AFF = (bx by 0)(cx cy 0)( 0 0 1)
MBo>Окружность, вписанная в квадрат, имеет уравнение (в общем виде для конических сечений Ax^2+Bxy+Cx^2+Dx+Ey+F=0, иногда B,D,E с коэффициентом 2 пишут)
MBo>x^2+y^2-x-y-1/4=0
MBo>или в матричном виде
MBo>[x y 1] * [CRCL] * [x y 1]^T = 0 (^T — транспозиция)
MBo>где СRCL = (1 0 -1/2)(0 1 -1/2)(-1/2 -1/2 1/4)
MBo>аффинное преобразование переводит уравнение в
MBo>[x y 1] * [AFF] * [CRCL] * [AFF]^T * [x y 1]^T = 0
MBo>произведение трех матриц в середине даст матрицу E, которую я посчитал в Maple, выписывать ее не буду, а сразу извлеку из нее параметры уравнения конического сечения
MBo>A=bx^2+by^2
MBo>B=2*(bx*cx+by*cy)
MBo>C=cx^2+cy^2
MBo>D=-bx-by
MBo>E=-cx-cy
MBo>F=1/4
MBo>Из этих данных уже можно вытащить все параметры эллипса. Например, наклон оси Tg(fi)=B/(A-C)
MBo>Но это уже самостоятельно..

1) Вы уверены в правильности матрицы AFF? у меня вышло (сx сy 0)(bx by 0)( 0 0 1) (это 3 строки)
2) Я вычислил коэффициенты A — F, после чего вычислил угол ФИ, центр и радиусы (исходя из коэффициентов), но они явно неправильные, я всё трижды перепроверил, использовал Вашу матрицу афф.пр. вместо своей, но ничего не помогает. Вычисления параметров эллипса брал отсюда http://mathworld.wolfram.com/Ellipse.html
Если есть какие-то замечания, буду признателен
Re[15]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: MBo  
Дата: 19.03.09 17:07
Оценка:
Здравствуйте, VovaMulder1983, Вы писали:

VM>1) Вы уверены в правильности матрицы AFF? у меня вышло (сx сy 0)(bx by 0)( 0 0 1) (это 3 строки)

это просто разный порядок именования вершин, наверно. Иначе различие скажется в виде отраженного параллелограмма

VM>2) Я вычислил коэффициенты A — F, после чего вычислил угол ФИ, центр и радиусы (исходя из коэффициентов), но они явно неправильные, я всё трижды перепроверил, использовал Вашу матрицу афф.пр. вместо своей, но ничего не помогает. Вычисления параметров эллипса брал отсюда http://mathworld.wolfram.com/Ellipse.html


Учтено, что часть коэффициентов в общем уравнении кривой у меня удвоенные, а на этой страничке нет?
Re[15]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: MBo  
Дата: 20.03.09 07:55
Оценка:
Здравствуйте, VovaMulder1983, Вы писали:

VM>Если есть какие-то замечания, буду признателен


При проверке примера нашел у себя принципиальную ошибку. Место и причину пока не локализовал, найду, есди появится время.
Re[16]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: VovaMulder1983  
Дата: 20.03.09 08:57
Оценка:
Здравствуйте, MBo, Вы писали:

MBo>это просто разный порядок именования вершин, наверно. Иначе различие скажется в виде отраженного параллелограмма


согласен

MBo>Учтено, что часть коэффициентов в общем уравнении кривой у меня удвоенные, а на этой страничке нет?


Я это учел, и все равно не выходит
Re[16]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: VovaMulder1983  
Дата: 20.03.09 09:11
Оценка:
Здравствуйте, MBo, Вы писали:

MBo>При проверке примера нашел у себя принципиальную ошибку. Место и причину пока не локализовал, найду, есди появится время.


и в Вашей, и в моей результирующих матрицах эллипса коэф В зависит от bx*cx+by*cy (у меня он равен bx*cx+by*cy , у Вас равен 2*(bx*cx+by*cy)). Привожу пример:
есть прямоугольник с вершинами B(-b, b) A(0, 0) C(c, c) D (c — b, c + b)
b > 0, c > 0
это прямоугольник, лежащий одной вершиной (A) в начале координат, "правой" смежной вершиной (B) на прямой y = x и "левой" смежной вершиной (C) на прямой y = -x

Таким образом, B = bx*cx+by*cy = | bx = -b, cx = c, by = b, cy = c| = -b * c + b * c = 0
Отсюда выходит, что эллипс, вписанный в такой прямогульник, выложен по координатным осям (его оси параллельны коорд. осям), но ведь это не так — угол наклона большой оси такого эллипса будет = 45 градусов.

Выходит, что принципиальная ошибка находится в изначальном подходе вычисления матрицы коэффициентов для уравнения эллипса
[x y 1] * [AFF] * [CRCL] * [AFF]^T * [x y 1]^T

Буду очень признателен, если у Вас появится время
Re[17]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: MBo  
Дата: 20.03.09 11:45
Оценка:
Здравствуйте, VovaMulder1983, Вы писали:

MBo>>При проверке примера нашел у себя принципиальную ошибку. Место и причину пока не локализовал, найду, есди появится время.

VM>Буду очень признателен, если у Вас появится время

Матрица обратная нужна была!
Вот так работает:

procedure CalcEllParams(bx, by, cx, cy: Integer; var A, B, C, D, E, F: Double);
var
  Cross, CrossSqr: Double;
begin
  Cross := 1/(bx * cy - cx * by);
  CrossSqr := Sqr(Cross);
  A := CrossSqr*(Sqr(cy) + Sqr(by));
  B := - 2 * CrossSqr* (cy * cx + by * bx);
  C := CrossSqr * (Sqr(cx) + Sqr(bx));
  D := Cross * (by - cy);
  E := Cross * (cx - bx);
  F := 1/4;
end;


http://files.rsdn.ru/17418/ell.gif
Re[18]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: VovaMulder1983  
Дата: 20.03.09 14:54
Оценка:
Здравствуйте, MBo, Вы писали:

MBo>
MBo>procedure CalcEllParams(bx, by, cx, cy: Integer; var A, B, C, D, E, F: Double);
MBo>var
MBo>  Cross, CrossSqr: Double;
MBo>begin
MBo>  Cross := 1/(bx * cy - cx * by);
MBo>  CrossSqr := Sqr(Cross);
MBo>  A := CrossSqr*(Sqr(cy) + Sqr(by));
MBo>  B := - 2 * CrossSqr* (cy * cx + by * bx);
MBo>  C := CrossSqr * (Sqr(cx) + Sqr(bx));
MBo>  D := Cross * (by - cy);
MBo>  E := Cross * (cx - bx);
MBo>  F := 1/4;
MBo>end;
MBo>


MBo>http://files.rsdn.ru/17418/ell.gif


Спасибо за готовое решение

MBo>Матрица обратная нужна была!

MBo>Вот так работает:

но не могли бы Вы привести изначальную модель (в матричном виде) и показать, где там нужна была обратная матрица
Re[19]: Эллипс вписанный в параллелограмм. Нужна книга или ф
От: MBo  
Дата: 20.03.09 15:29
Оценка:
Здравствуйте, VovaMulder1983, Вы писали:

VM>но не могли бы Вы привести изначальную модель (в матричном виде) и показать, где там нужна была обратная матрица


Матрица аффинного преобразования была нужна обратная (т.е. преобразования из параллелограмма в единичный квадрат).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.