Просмотр полной версии : Вычесляемс
dixlofos
13.03.2010, 19:35
Народ, второй день голову ломаю, сделать некак не могу =]
Как определить координату точки прямой, вращающейся относительно другой своей точки (прямая из двух точек состоит), если длинна прямой известна и угол поворота тоже?
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
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();
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.