Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Продолжить направление линии (http://www.flasher.ru/forum/showthread.php?t=160423)

Scorp2008 12.07.2011 18:27

Продолжить направление линии
 
Имеется вот такой код:
Код AS3:

my_canvas.graphics.clear();
my_canvas.graphics.lineStyle(2, 0xFF0000);
my_canvas.graphics.moveTo(bodyconm.x, bodyconm.y);
my_canvas.graphics.lineTo(mouseX, mouseY);

как понятно из него он рисует линию от определенного объекта (bodyconm) и до координат мыши. Задача в том чтобы линия заканчивалась не сразу на мышке, а чуть поодаль, пикселей на 30, сохравнив при этом направление. Чтобы было понятнее прихреначиваю картинку.
[IMG]http://s007.***********/i301/1107/e0/7ec3180e5206.png[/IMG]
Спасибо :drinks:

i.o. 12.07.2011 18:31

Геометрия. Векторы. Загляните в соседнюю тему..

Scorp2008 12.07.2011 18:43

ну вы прям не i.o. а К.О. , я знаю что это векторы и геометрия, но мой скудный ум совсем не понимает математики, но код пишет кое как, да. Может код подскажете, 2 строчки то всего :umnik2:

i.o. 12.07.2011 18:49

Цитата:

Может код подскажете, 2 строчки то всего
Код:

vec = B - A
C = A + vec * (нужнаяДлина / vec.length)

Ну вот как то так

OnEg1n 12.07.2011 18:57

здесь глянь

http://xitri.com/2009/03/19/crimsonl...ionscript.html

здесь ружье крутится за мышью...код здесь на as2, но разобраться можно

Scorp2008 12.07.2011 18:57

i.o. - такое я только с Point сделать смогу наверное, B - это координаты bodyconm, A - координаты мыши, а C итоговые координаты.. Так нормально будет сделать с точками? А vec.length - это как определять, vec это что вообще, какой тип переменной?

Добавлено через 58 секунд
OnEg1n - чтоб ружьё за мышью крутилось у меня сделано, вопрос совсем в другом.

OnEg1n 12.07.2011 19:05

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

Scorp2008 12.07.2011 19:10

не нужно мне "дорисовывать", нужно чтоб это изначально было от начала и до конца 1 линия, а всё остальное не понял как сделать. Ладно, я понял, бестолку конкретный код спрашивать у понимающих, все только наставлять горазды как-будто от этого толку больше будет, я вообще изредка с этим сталкиваюсь, с математикой всякой и не понимаю её.

i.o. 12.07.2011 19:14

Цитата:

Сообщение от Scorp2008 (Сообщение 1011119)
i.o. - такое я только с Point сделать смогу наверное, B - это координаты bodyconm, A - координаты мыши, а C итоговые координаты.. Так нормально будет сделать с точками? А vec.length - это как определять, vec это что вообще, какой тип переменной?

ну все правильно. Point.
Цитата:

А vec.length - это как определять
У Point есть метод length, насколько помню.

Scorp2008 12.07.2011 19:16

Хорошо, спасибо, сейчас попробую. А вот так можно делать или каждый поинт лучше отдельно определять?
Код AS3:

var A,B,C,vec:Point = new Point();

попробовал вот что:
Код AS3:

                var A, B, C, vec:Point = new Point();
                A.x = bodyconm.x;
                A.y = bodyconm.y;
                B.x = mouseX;
                B.y = mouseY;
                vec = B - A;

Последняя строчка неверна, нельзя так точку определять, подскажите как верно.

i.o. 12.07.2011 19:18

для начала сделайте отдельно. Потом уберете лишнее.

Добавлено через 6 минут
Код AS3:

var A:Point = new Point(bodyconm.x, bodyconm.y);
var B:Point = new Point(mouseX, mouseY);
var vec:Point = new Point(B.x - A.x,  B.y - A.y);
var C:Point = new Point();
....


Scorp2008 12.07.2011 19:31

Так, хорошо, работает. Ну "С" самое сложное, что-то никак тут совсем не догадаться как сделать, давайте ка без меня )))))
Код AS3:

C = A + vec * (40 / vec.length);

Не разобрать ведь где X, где Y, а целым куском опять же ошибка.

i.o. 12.07.2011 19:42

Цитата:

Не разобрать ведь где X, где Y, а целым куском опять же ошибка.
а вы отдельно для Х и Y вычисляйте :)

Scorp2008 12.07.2011 19:49

Ну, всё работает, вот так верно:
Код AS3:

C.x = A.x + vec.x * (40 / vec.length);
C.y = A.y + vec.y * (40 / vec.length);

Спасибо :drinks:

i.o. 12.07.2011 19:50

ну вот, другое дело)


Часовой пояс GMT +4, время: 17:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.