PDA

Просмотр полной версии : Как вычислить координаты точки ????


DarkChris
05.10.2006, 16:07
Вот бьюсь с простой геометрической задачей уже пару дней :( И не могу найти решение :( Может с вычислениями ошибка :( Подскажите плиз...
Смотрим на рисунки:
qwest1. jpg

1. сам клип состоит из вложеных в него 3-х клипов Рамка,Четырехугольник и кнопка трансформации
2. при трансформации по горизотали клип увеличивается пропорционально относительно центра
3. находим смещение dX и смещаем клип, что бы казалось что четырехугольник тянется относительно стороны
dX - найти не сложно, вопрос не в этом. При повороте клипа на угол alpha (рисунок qwest2.jpg)
_parent._x +=dX работать не будет. В этом случае еще нужно смещать клип относительно координаты Y.

Я провел напраляющую из т.А паралельно оси Х и опустил на нее перпендикуляр из т.С, в результате получил прямоугольный треугольник.

В полученном треугольнике мне известны:
1. координаты т.А (х,у)
2 угол alpha - это угол поворота муви-клипа.

Мне нужно найти т.С координаты(х,у)
Из предыдущего рисунка (qwest1.jpg пункт 3.) видно что длина стороны треугольника a=dX;
По теореме синусов вычисляем катеты треугольника (они и есть смещение стартовой точки по оси Х и оси У ):

c/sin(alpha) = b/sin(gamma)=a/sin(beta)
beta =90 sin(90)=1;
c/sin(alpha)=a (где a=dX)
c = dx*sin(alpha) - смещение по Y

alpha = Math.PI*_parent._rotation/180 - в радианах
gamma = 180 - (90+alpha)=90-alpha и в радианах = (Math.PI/2 - _parent._rotation)*Math.PI/180;
b = dx*sin(gamma) - смещение по Х


так вот если я подставляю

_parent._x+=b;
_parent._y+=c;


то смещение неверное ума не приложу в чем ошибка математически вроде все верно .

На рисунках:
синяя точка (т.А) - точка до растяжения клипа, зеленая (т.С) - после)
т.А - центр клипа локальные координаты (0,0)

вот код кнопки:

on (press) {
this._pW = _parent._x-_parent._width/2;
tW = _parent._x-this._x;
this.onMouseMove = function() {
if(_parent.Picture._width>30){
this._x=_parent._xmouse;
dtx = _parent.Ramka._width-_parent.Picture._width;
_parent.Picture._width = 2*this._x-dtx;
_parent.CreateRamka(0,0);
_parent.ScaleButtons();
tW = _parent._x - _parent._width/2;
dX = this._pW-tW;
Alpha = (Math.PI * _parent._rotation) / 180;
Gamma = (Math.PI/2 - _parent._rotation)*Math.PI/180;
trace (Math.sin(Alpha)+"<<<");
_parent._x += dX*Math.sin(Gamma);
_parent._y += dX*Math.sin(Alpha);

}
};
}
on (release, releaseOutside) {
this.onMouseMove = null;
}


ВОПРОС:
1. почему смещение путем использования данного кода не правильное, ведь геометрическое решение проблеммы вроде верное
2. почему при не повернутом клипе альфа = 0, когда я тяну мышкой кнопку сторона неподвижна (относительно которой идет трансформация), а клип при трансформации прыгает туда-сюда.

etc
05.10.2006, 16:13
А где, собственно, вопрос, что требуется?

iNils
05.10.2006, 16:28
Есть метод localToGlobal, который вам поможет.

DarkChris
05.10.2006, 16:35
вот код кнопки:

on (press) {
this._pW = _parent._x-_parent._width/2;
tW = _parent._x-this._x;
this.onMouseMove = function() {
if(_parent.Picture._width>30){
this._x=_parent._xmouse;
dtx = _parent.Ramka._width-_parent.Picture._width;
_parent.Picture._width = 2*this._x-dtx;
_parent.CreateRamka(0,0);
_parent.ScaleButtons();
tW = _parent._x - _parent._width/2;
dX = this._pW-tW;
Alpha = (Math.PI * _parent._rotation) / 180;
Gamma = (Math.PI/2 - _parent._rotation)*Math.PI/180;
trace (Math.sin(Alpha)+"<<<");
_parent._x += dX*Math.sin(Gamma);
_parent._y += dX*Math.sin(Alpha);

}
};
}
on (release, releaseOutside) {
this.onMouseMove = null;
}

DarkChris
05.10.2006, 16:41
не понимаю чем мне поможет localToGlobal если я к глобальным координатам плюсую смещение на Н пикселей а не локальные координаты точки :(

iNils
05.10.2006, 16:47
1. Надо задавать вопрос нормально. А не в середине текста.
2. Использовать знаки препинания, иначе читать вобще не возможно.
Перефразируйте свой вопрос без математических выкладок.

DarkChris
05.10.2006, 17:02
Я дал код и математическое описание алгоритма (помоемому вполне понятное для тех кто изучал геометрию в школе). И прошу помочь мне найти ошибку. Если это невозможно подскажите пожалуйста другой способ реализации этой задачи (если таковой имеется). Пунктуацию подправил, вопросы находятся в конце описания проблеммы.

iNils
05.10.2006, 17:07
Эх... вы можете объяснить, что вы хотите получить?
Узнать координаты точки после трансформации?

DarkChris
05.10.2006, 17:33
Да вы совершенно правильно поняли идею...Мне нужны именно координаты точки после трансформации - на рисунке qwest2.jpg точка "С" . Она является центром мувиклипа после трансформации и смещения.

iNils
05.10.2006, 17:48
/*
Координаты точки одного мувиклипа, относительно другого.
mcA - клип, точку которого вычисляют
mcB - клип, относительно которого производится вычисление
point - точка в клипе mcA
*/
function positionPoint (mcA:MovieClip, mcB:MovieClip, point:Object):Object {
mcA.localToGlobal (point);
mcB.globalToLocal (point);
return point;
}

DarkChris
05.10.2006, 18:01
Это я знаю...Блин... Мне нужно получить глобальные координаты точки "С" на рисунке (qwest2.jpg) Эта точка - координата центра клипа после трансформации со смещением.. А вы мне дали функцию перевода координат относительно клипа... Я дал же алгоритм вычисления этой точки но он не работает... Думал есть люди которые решали подобную задачу, что бы подсказали мне где я ошибся может я неправильно смещение вычислил, а может в коде допустил ошибку. я не могу ее найти к сожалению :( Иначе бы не спрашивал...

DarkChris
05.10.2006, 18:10
iNils
Есть ли ICQ и время я попытаюсь обьяснить подругому ?

iNils
05.10.2006, 18:21
Время есть, а ася это личное, так что тут.
Я не понимаю, если "Мне нужно получить глобальные координаты точки "С", то в чем проблема? Ответ в 3-м посте.

DarkChris
05.10.2006, 18:28
Ок мне не нужно перевести эти координаты, а именно получить. Узнать чему равен Х и У
то что у меня оно не работает :(
Вопрос по другому
У меня есть клип, я его повернул на Альфу и растянул по горизонтали мне нужно узнать куда сместится центр клипа в этом случае, найти точку "С", не перевести уже найденные координаты относительно другого клипа, а именно найти их

iNils
05.10.2006, 18:48
Честное слово, я вас не понимаю. Подождем еще кого-то, кто сможет это сделать.

DarkChris
05.10.2006, 19:14
В двух словах мне нужно реализовать растяжение обьекта в сторону относительно противоположной стороны.
Так понятнее ? У меня возникают проблеммы если я поверну этот обьект тогда при растяжении он начинает ездить по экрану а мне нужно чтобы он оставался на месте

DarkChris
05.10.2006, 20:01
Вот исходник функция TransformX
и посмотрите если не поворачивать и растягивать его вправо,он растягивается (опять не понятно почему скачет при растяжении), а если поверуть его и потянуть тогда обьект начинает ездить по экрану, а не стоять на месте :(

iNils
05.10.2006, 20:14
Вот простой пример.

DarkChris
06.10.2006, 11:17
О!!! Спасибо огромное !!!!! :)