PDA

Просмотр полной версии : Вычесляемс


dixlofos
13.03.2010, 19:35
Народ, второй день голову ломаю, сделать некак не могу =]
Как определить координату точки прямой, вращающейся относительно другой своей точки (прямая из двух точек состоит), если длинна прямой известна и угол поворота тоже?

udaaff
13.03.2010, 19:47
Math.sin(), Math.cos() в помощь. Вычисляйте проекции радиуса на оси координат.

var x:Number = ox + r * Math.cos(deg * Math.PI / 180 );
var y:Number = oy + r * Math.sin(deg * Math.PI / 180 );
ox, oy — координаты центра, r — радиус, deg — угол поворота в градусах.
Как то так, я думаю, если не ошибаюсь.

upd: возможно косинус с синусом местами поменять надо :)

dixlofos
13.03.2010, 20:20
нет, явно не так

Добавлено через 3 минуты
хотя может и так))
У меня еще и с вычеслением угла беда, ладно лучше сам тогда подумаю, что бы ошибки не умножать)

Добавлено через 9 минут
хотя нет точно не так, но это не уменьшает проблемы с вычеслением угла)

undefined
13.03.2010, 20:43
x1,y1,x2,y2 - кординаты точек прямой
a - угол поворота в радианах

x3 = Math.cos(a)*(x2-x1)-Math.sin(a)*(y2-y1)+x1
y3 = Math.sin(a)*(x2-x1)+Math.cos(a)*(y2-y1)+y1

udaaff
14.03.2010, 00:10
var shape:Shape = new Shape();
addChild(shape);

// 1. координаты первой точки
var x0:Number = 200;
var y0:Number = 200;

stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMoveHandler);

function stage_mouseMoveHandler(event:MouseEvent):void
{
var dx:Number = x0 - event.stageX;
var dy:Number = y0 - event.stageY;

// 2. длина отрезка
var l:Number = Math.sqrt(dx * dx + dy * dy);

// 3. угол
var rad:Number = Math.atan2(dy, dx);

// предположим, что мы не знаем координаты второй точки
// те которые event.stageX, event.stageY
// имеется только то, что отмечено коментариями с цифрами,
// что и дано по условию

// находим проекцию отрезка на ось X
var lx:Number = l * Math.cos(rad);

// находим проекцию отрезка на ось Y
var ly:Number = l * Math.sin(rad);

// координаты второй точки
var x1:Number = x0 - lx;
var y1:Number = y0 - ly;

// отрезок
shape.graphics.clear();
shape.graphics.lineStyle(0);
shape.graphics.moveTo(x0, y0);
shape.graphics.lineTo(event.stageX, event.stageY);
shape.graphics.lineStyle(0, 0x00FF00);

// проекция отрезка на X
shape.graphics.moveTo(x0, y0);
shape.graphics.lineTo(x1, y0);

// проекция отрезка на Y
shape.graphics.moveTo(x0, y0);
shape.graphics.lineTo(x0, y1);

event.updateAfterEvent();
}