Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

Прекалкулиране на точка от изображение след ротация

Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 18:57

Здравейте, може би съм забравил малко математиката и търся съдействие за следната задача. Имам изображение с размер(W,H), имам и точка в това избражение с координати P(x, y). Извършвам ротация с 60 градуса и трябва да презичисля въпросната точка. Трябва да спомена, че снимката има начални координати (0,0) от левия горен ъгъл. За да е по точко ще напиша истински данни: Размер на изображението: W=816, H=707,2 и координати на P(25,200).
Първо опитах следния подход: намерих радиос R от центъра на въпросната точка: R = [tex]\sqrt{(W/2)^{2}+(H/2)^{2}}[/tex] Намерих ъгъла: [tex]CosA =\frac{H/2}{R}[/tex] И към него добавих 60 градуса ротация. Със следните формули намирам новите координати:
[tex]x1=Sin(A)*R[/tex] и [tex]y1=Cos(A)*R[/tex]. Не мога да разбера, къде греша. Използвам софт. който ми посочи новите координати и не са това, което аз изчислявам.
Новите координати са: X = 188px Y = 782px и се намират в 3 квадрант.


Някой идея?
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ptj » 01 Дек 2019, 19:51

По принцип положение на точка се определя от радиус-вектор [tex]R[/tex] и ъгъл [tex]\alpha[/tex] , който той сключва с абцисната ос.
Чрез тях се получават координатите на точката: [tex]x=R.cos\alpha ; y=R.sin\alpha[/tex].

Ако извършваш ротация на [tex]+60^\circ[/tex] около координатното начало, новите координати ще са [tex]x_1=R.cos(60+\alpha), y_1=R.sin(60+\alpha)[/tex].

За да избегнеш изчисляването на самия ъгъл [tex]\alpha[/tex], ще ти се наложи да използваш тригонометрия:

[tex]cos(60^\circ+\alpha)= cos(60^\circ).cos\alpha- sin(60^\circ).sin\alpha[/tex]

[tex]sin(60^\circ+\alpha)=sin(60^\circ).cos\alpha+cos(60^\circ).sin\alpha[/tex]

Тогава съответните нови координати ще са:

[tex]x_1=\frac{1}{2}x-\frac{\sqrt{3}}{2}y[/tex]

[tex]y_1=\frac{\sqrt{3}}{2}x+\frac{1}{2}y[/tex]

П.П. Ако имаш да правиш по-сложни чертежи използващи ротация, транслация, мащабиране, групиране на обекти и т.н. , ти препоръчвам да използваш ОpenGL.
Теорията, на която се основава се изучава едва в университетите, затова може и да ти малко трудно в началото да разбереш веднага кое, как и защо става...
ptj
Математик
 
Мнения: 3305
Регистриран на: 26 Юли 2010, 19:17
Рейтинг: 1112

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 20:03

ptj написа:По принцип положение на точка се определя от радиус-вектор [tex]R[/tex] и ъгъл [tex]\alpha[/tex] , който той сключва с абцисната ос.
Чрез тях се получават координатите на точката: [tex]x=R.cos\alpha ; y=R.sin\alpha[/tex].

Ако извършваш ротация на [tex]+60^\circ[/tex] около координатното начало, новите координати ще са [tex]x_1=R.cos(60+\alpha), y_1=R.sin(60+\alpha)[/tex].

За да избегнеш изчисляването на самия ъгъл [tex]\alpha[/tex], ще ти се наложи да използваш тригонометрия:

[tex]cos(60^\circ+\alpha)= cos(60^\circ).cos\alpha- sin(60^\circ).sin\alpha[/tex]

[tex]sin(60^\circ+\alpha)=sin(60^\circ).cos\alpha+cos(60^\circ).sin\alpha[/tex]

Тогава съответните нови координати ще са:

[tex]x_1=\frac{1}{2}x-\frac{\sqrt{3}}{2}y[/tex]

[tex]y_1=\frac{\sqrt{3}}{2}x+\frac{1}{2}y[/tex]

П.П. Ако имаш да правиш по-сложни чертежи използващи ротация, транслация, мащабиране, групиране на обекти и т.н. , ти препоръчвам да използваш ОpenGL.
Теорията, на която се основава се изучава едва в университетите, затова може и да ти малко трудно в началото да разбереш веднага кое, как и защо става...


Здравей,
пробвал съм да изчисля новите координати с формулата: x1=R.cos(60+α),y1=R.sin(60+α). Но резултатите не валидни.
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ptj » 01 Дек 2019, 20:09

Какви са координатите на точката, около която извършваш ротацията и в каква посока - по часовникова стрелка или обратно?
ptj
Математик
 
Мнения: 3305
Регистриран на: 26 Юли 2010, 19:17
Рейтинг: 1112

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 20:20

ptj написа:Какви са координатите на точката, около която извършваш ротацията и в каква посока - по часовникова стрелка или обратно?



Здравейте, както и съм ги посочил: W=816, H=707,2 и координати на P(25,200) и 60 градуса обратно на часовниковата стрелка. С програма измерих получените нови координати : X = 188px Y = 782px и се намират в 3 квадрант
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ptj » 01 Дек 2019, 20:24

Размени стойностите на [tex]x[/tex] и [tex]y[/tex] във формулите, които съм написал по-горе (във всички).

Програмата, с която смяташ не е наред, защото няма как само с ротация да получиш координата над 250, защото дължината на радиус вектора на точката ти е [tex]\approx 202.56[/tex].
Последна промяна ptj на 01 Дек 2019, 20:34, променена общо 1 път
ptj
Математик
 
Мнения: 3305
Регистриран на: 26 Юли 2010, 19:17
Рейтинг: 1112

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 20:29

ptj написа:Размени стойностите на [tex]x[/tex] и [tex]y[/tex] във формулите, които съм написал по-горе (във всички).

Ами в тези, които използвам и които вие посочихте няма x и y ..... [tex]x1=R.cos(60+α),y1=R.sin(60+α)[/tex] :?: :?:
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 20:33

ptj написа:Какви са координатите на точката, около която извършваш ротацията и в каква посока - по часовникова стрелка или обратно?

Точката в/у която извършвам ротация е центъра на снимката. съответно 1/2 от височината и дължината W=816, H=707,2, която съм посочил.
Център: 408,353.6
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ptj » 01 Дек 2019, 20:40

Това е съвсем различна задача. Трябва да се извършат 3 операции :

1.) Да се транслира (0;0) в центъра на изображението.
2.) Да се извърши ротация на [tex]60^\circ[/tex]
3.)Да се върне обратна транслация - центъра на изображението да иде в координатното начало.

Т.е. трябва да се направят 3 преизчисления на координатите.
ptj
Математик
 
Мнения: 3305
Регистриран на: 26 Юли 2010, 19:17
Рейтинг: 1112

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 20:41

Ще кача и снимки на обработката. С червено съм отбелязъл въпросната точка. Преди ротация
Floor2.png
Floor2.png (165.5 KiB) Прегледано 630 пъти
и след ротация
Floor2_scaled_rotated.png
Floor2_scaled_rotated.png (558.46 KiB) Прегледано 631 пъти
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 20:45

ptj написа:Това е съвсем различна задача. Трябва да се извършат 3 операции :

1.) Да се транслира (0;0) в центъра на изображението.
2.) Да се извърши ротация на [tex]60^\circ[/tex]
3.)Да се върне обратна транслация - центъра на изображението да иде в координатното начало.

Т.е. трябва да се направят 3 преизчисления на координатите.


точка 1.) не ми е много ясна, както и 3.) С други думи не разбрах :(
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ptj » 01 Дек 2019, 20:45

Ще ви сметна формулите по-късно днес.
ptj
Математик
 
Мнения: 3305
Регистриран на: 26 Юли 2010, 19:17
Рейтинг: 1112

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 20:49

ptj написа:Ще ви сметна формулите по-късно днес.

Благодаря. Днес цял ден се опитвам да направя формулите и затова си изграх със софтуер да си изчисля тези примерни координати, за да мога да валидирам формулите, защото ще ги използвам за вясякакви входни данни(параметри). И да изображенията започват с 0,0 но от горния ляв ъгъл. Така е с всеки софтуер, дори и обикновенния paint :)
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 22:05

Тъй, като продължавам да ровя за решение. Намерих от този сайт https://homepages.inf.ed.ac.uk/rbf/HIPR2/rotate.htm следните формули:
Capture.JPG
Capture.JPG (20.27 KiB) Прегледано 622 пъти
Но и с тях ми се получават различни резултати. Като входните данни са: Размер на снимката(816,707.2)
х1 = 25, у1=200; х0=408, у0=356.6 и ъгъл на ротация 60 А за х2 получих 80. Което е доста далече от реалните X = 188px Y = 782px :o


Пробвах и с тези формули [tex]xRot = xCenter + cos(Angle) * (x - xCenter) - sin(Angle) * (y - yCenter)
yRot = yCenter + sin(Angle) * (x - xCenter) + cos(Angle) * (y - yCenter)[/tex] от този сайт http://benn.org/2007/01/06/rotating-coordinates-around-a-centre/ където точно това се цели, но уви.... резултатите не са ок :(
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ptj » 01 Дек 2019, 23:41

Начално положение на точката [tex](x_0;y_0)[/tex].
[tex]x_0=R_0.cos\alpha_0[/tex]
[tex]y_0=R_0.sin\alpha_0[/tex]
[tex]R_0^2=x_0^2+y_o^2[/tex]


1.) Транслация [tex](0;0)->(408;366.6)[/tex]

[tex]x_1=x_0-408=R_1. cos\alpha_1,[/tex]
[tex]y_1=y_0-366.6=R_1.sin\alpha_1[/tex]
[tex]R_1^2=x_1^2+y_1^2[/tex]


2.) Ротация на [tex]+60^\circ[/tex] спрямо новото координатно начало [tex](x_1=0; y_1=0)[/tex]

[tex]x_2=R_1.cos(\alpha_1+60^\circ)=R_1.cos(60^\circ).cos(\alpha_1)-R_1.sin(60^\circ).sin(\alpha_1)=\frac{1}{2}x_1-\frac{\sqrt{3}}{2}y_1=
\frac{1}{2}(x_0-408)-\frac{\sqrt{3}}{2}(y_0-366.6)[/tex]

[tex]y_2=R_1.sin(\alpha_1+60^\circ)=R_1.sin(60^\circ).cos(\alpha_1)+R_1.cos(60^\circ).sin(\alpha_1)=\frac{\sqrt{3}}{2}x_1+\frac{1}{2}y_1=\frac{\sqrt{3}}{2}(x_0-408)+\frac{1}{2}(y_0-366.6)[/tex]

3.) Връщане (транслация) на координатното начало в точката (0;0)

[tex]x_3=x_2+408=\frac{1}{2}(x_0-408)-\frac{\sqrt{3}}{2}(y_0-366.6) +408[/tex]


[tex]y_3=y_2+366.6=\frac{\sqrt{3}}{2}(x_0-408)+\frac{1}{2}(y_0-366.6)+366.6[/tex]


Изплозвай последната формула за координатите [tex](x_3;y_3)[/tex] ;)
Това е точно намерената от теб формула, която е вярна 100%.
Разликата в резултата при теб може да е от функциите даваща резултат за [tex]cos[/tex] и [tex]sin[/tex].
Провери дали техния аргумент (ъгъла, който въвеждаш) не е в радиани.
Просто си отпечатай [tex]cos(Angle)[/tex] и виж дали е [tex]0.5[/tex].
Последна промяна ptj на 01 Дек 2019, 23:51, променена общо 1 път
ptj
Математик
 
Мнения: 3305
Регистриран на: 26 Юли 2010, 19:17
Рейтинг: 1112

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 01 Дек 2019, 23:50

ptj написа:Начално положение на точката [tex](x_0;y_0)[/tex].
[tex]x_0=R_0.cos\alpha_0[/tex]
[tex]y_0=R_0.sin\alpha_0[/tex]
[tex]R_0^2=x_0^2+y_o^2[/tex]


1.) Транслация [tex](0;0)->(408;366.6)[/tex]

[tex]x_1=x_0-408=R_1. cos\alpha_1,[/tex]
[tex]y_1=y_0-366.6=R_1.sin\alpha_1[/tex]
[tex]R_1^2=x_1^2+y_1^2[/tex]


2.) Ротация на [tex]+60^\circ[/tex] спрямо новото координатно начало [tex](x_1=0; y_1=0)[/tex]

[tex]x_2=R_1.cos(\alpha_1+60^\circ)=R_1.cos(60^\circ).cos(\alpha_1)-R_1.sin(60^\circ).sin(\alpha_1)=\frac{1}{2}x_1-\frac{\sqrt{3}}{2}y_1=
\frac{1}{2}(x_0-408)-\frac{\sqrt{3}}{2}(y_0-366.6)[/tex]

[tex]y_2=R_1.sin(\alpha_1+60^\circ)=R_1.sin(60^\circ).cos(\alpha_1)+R_1.cos(60^\circ).sin(\alpha_1)=\frac{\sqrt{3}}{2}x_1+\frac{1}{2}y_1=\frac{\sqrt{3}}{2}(x_0-408)+\frac{1}{2}(y_0-366.6)[/tex]

3.) Връщане (транслация) на координатното начало в точката (0;0)

[tex]x_3=x_2+408=\frac{1}{2}(x_0-408)-\frac{\sqrt{3}}{2}(y_0-366.6) +408[/tex]


[tex]y_3=y_2+366.6=\frac{\sqrt{3}}{2}(x_0-408)+\frac{1}{2}(y_0-366.6)+366.6[/tex]


Изплозвай последната формула за координатите [tex](x_3;y_3)[/tex] ;)
Това е точно намерената от теб формула.

Благодаря! Ще изпробвам утре сутрин формулите. Само няколко въпроса:
1: x0 и у0 са координати на моята точка- преди ротацията?
2 cos0 и cos1 едното ъгъла на който стои моята точка, а другия?
3 Коя по точно последна формула?
4 Има ли значение в кой квадрант ще бъде новата точка?
Последна промяна ivelin на 01 Дек 2019, 23:53, променена общо 1 път
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ptj » 01 Дек 2019, 23:52

Виж края на предишното ми мнение! ;)

Трябва ти само:

[tex]x_3=\frac{1}{2}(x_0-408)-\frac{\sqrt{3}}{2}(y_0-366.6) +408[/tex]


[tex]y_3=\frac{\sqrt{3}}{2}(x_0-408)+\frac{1}{2}(y_0-366.6)+366.6[/tex]

Трансформацията не зависи от началното положение (квадрант) на точката [tex](x_0;y_0)[/tex].
ptj
Математик
 
Мнения: 3305
Регистриран на: 26 Юли 2010, 19:17
Рейтинг: 1112

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ivelin » 02 Дек 2019, 08:53

ptj написа:Виж края на предишното ми мнение! ;)

Трябва ти само:

[tex]x_3=\frac{1}{2}(x_0-408)-\frac{\sqrt{3}}{2}(y_0-366.6) +408[/tex]


[tex]y_3=\frac{\sqrt{3}}{2}(x_0-408)+\frac{1}{2}(y_0-366.6)+366.6[/tex]

Трансформацията не зависи от началното положение (квадрант) на точката [tex](x_0;y_0)[/tex].


Здравей направих изчисленията и за пореден път резултатите не са валидни: директно земестих със следните входни данни х0 = 25, у0=200 и се получава:
х3 = 360,775 и у3= -48,37. Нито х точката е правилна, а да не говорим, че в изображение не може да имаме отрицателна стойност.
Ето прикачвам снимка с измерените координати, които трябва да се получат :)
Untitled.png
Untitled.png (340.02 KiB) Прегледано 609 пъти
ivelin
Нов
 
Мнения: 11
Регистриран на: 01 Дек 2019, 18:19
Рейтинг: 0

Re: Прекалкулиране на точка от изображение след ротация

Мнениеот ptj » 03 Дек 2019, 08:08

Смятах на калулатор и при [tex](x_0;y_0)=(25;200)[/tex] се получава [tex](x_3;y_3)=(360.26;-48.39)[/tex].

Резултата е правилен, защото формулите са за въртене на [tex]60^\circ[/tex] по часовникова стрелка.

Отрицателната стойност се получава, защото началната точка е много близо до дясната граница на рамката ти (екран), а неговата ширина е по-голяма от височината му.


Трябва да решиш какво ще правиш - да правиш екрана квадратен или снимката по-малка. Другото е точния ъгъл и посоката му.

П.П. На твоите снимки въртенето е по посока обратна на часовникова стрелка.
ptj
Математик
 
Мнения: 3305
Регистриран на: 26 Юли 2010, 19:17
Рейтинг: 1112


Назад към Тригонометрия



Кой е на линия

Регистрирани потребители: Google [Bot]

Форум за математика(архив)