Есть вектор, заданные 2 точками( произвольными). Разность между каждой из координат векторов не превышает половины разрешения экрана( то есть первый вектор в центре экрана, а второй в любом другом месте на экране).
Мне необходимо сместить этот вектор на определенную величину, в сторону перпендикуляра к вектору с двух сторон( смотрим картинку если не понятно)
Нужно найти вектора, которые нарисованы пунтриром
Я так понял проблема нарисовать параллельный вектор?
У вектора "а" есть направление (x,y), переворачиваем его, где nx=-y, ny=-x. Это и есть перпендикулярное направление в сторону параллельного вектора, перемножай его на "некое значение" получишь точку начало вектора "b", от нее строишь вектор с направлением "а". вектор "с" nx=y, ny=-x
опиши что у тебя вызывает сложность
Sneaks
> опиши что у тебя вызывает сложность
Вот ты писал
Sneaks
> У вектора "а" есть направление (x,y), переворачиваем его, где nx=-y, ny=-x. Это
> и есть перпендикулярное направление в сторону параллельного вектора,
Что за "n"
например у меня вектор a представлен в виде двух точек AB.
A=[10,10] B=[20,10]
как я понял, направление- это "B"
далее ??? система уравнений??? или что это????
nx=-y ny=-x
если x=20, а y=10, то
n*20=-10 n*10=-20
решаю
20n+10n=-30 30n=-30 n=-1
Что за "n"????
Sneaks
> У вектора "а" есть направление (x,y), переворачиваем его
переворачиваем- это отражаем вектор в противоположную направлению сторону???
направление это вектор из точки А в сторону точки В с длинной в 1 попугай
находишь направление
vx=x/r
vy=y/r
где:
vx-направление по х
vy-направление по у
r - расстояние между А и В по формуле. (http://ru.onlinemschool.com/math/library/analytic_geometry/point_point_length/)
x=A(x)-B(x)
y=A(y)-B(y)
у тебя получится сам вектор направление назовем его VA и у него будет свой х и у. Вот с ними и играемся.
nx=-y
ny=-x
(nx,ny) - это перпендикулярное направление от твоего вектора А в левую сторону от него.
Для смещения перемножаем его значение на "n" и мы узнаем где будет находиться начальная точка параллельного вектора. От нее строим новый вектор, либо так же используя nx,ny, тем более что у нас уже будет известно длина изначального вектора.
и к стати если у тебя
A=[10,10]
B=[20,10]
то это не вектор, а отрезок.
mazahist
>
> например у меня вектор a представлен в виде двух точек AB.
Учи мат часть...
Вектор это направление. Не из A в B, а просто направление.
Грубо говоря вектор a(10,20) это направление из начала координат в точку 10,20 (x,y соответственно).
Проделывая различные операции над векторами (сложение, увножение и т.д.) ты получишь другое направление, другой длины.
Из двух точек A1A2 получаешь вектор а = A2 - A1.
Нормализуешь вектор а.
Потом поворачиваешь вектор a на 90 и -90 градусов, получаешь вектора ab и ac, они будут перпендикулярны вектору а (твоему отрезку A1A2).
Умножаешь вектора ab и ac на n - тем самым задашь расстояние между отрезками A1A2 и B1B2 и C1C2.
Затем прибавляешь к вектору ab точку A1, получишь точку B1, прибавляешь к вектору ab точку A2, получишь точку B2.
Затем прибавляешь к вектору ac точку A1, получишь точку C1, прибавляешь к вектору ac точку A2, получишь точку C2.
Если формулами:
a = A2-A1;
a = normalize(a);
a = a * n;
ab = rotate(a, -90);
ac = rotate(a, 90);
B1 = ab + A1;
B2 = ab + A2;
C1 = ac + A1;
C2 = ac + A2;
a,ab,ac - вектора
A1,A2,B1,B2,C1,C2 - точки
n - число
Видать форму регистрации нужно усложнять.
нормали посчитать может, значит и перпендикуляр найти может.
Тема в архиве.