2013-03-24 4 views
0

Я хочу нарисовать линию на холсте. Поэтому я использую два клика от пользователя для определения начальной точки S и конечной точки E.Как урезать линию между двумя точками?

ctx.moveTo(sx, sy); 
ctx.lineTo(ex, ey); 

Я также хочу, чтобы вычитать статическое смещение по обе стороны от линии, например static int offset = 10; Моя проблема: как я могу знать о направлении (север, восток, юг, запад), к которому я должен добавить или вычесть смещение?

Если линия идет сверху вниз, мне нужно будет применить (0, +10) в начальной точке S и (0, -10) в конечной точке. Получение mor сложнее, когда линия проходит по диагонали через координатное пространство.

Возможно, это может быть «простая» математическая проблема, но мне не хватает правильных ключевых слов, чтобы найти какие-либо решения.

+0

посмотреть Math.tan() – Breavyn

ответ

0

Вам просто нужно использовать базовую математику.

  1. Найти х и у перемещениями
  2. Найти угол тета
  3. Создать вектор смещения
  4. Добавить или принять это с вашей точки

Позвольте мне знать, если это не Работа.

int offset = 10; 

int[] point1 = {15, 25}; //start point 
int[] point2 = {42, 37}; //end point 

int xDisplacement = point2[0] - point1[0]; 
int yDisplacement = point2[1] - point1[1]; 

double theta = Math.toDegrees(Math.atan2(yDisplacement, xDisplacement));   

double[] diplacementVector = {offset*Math.cos(theta), offset*Math.sin(theta)}; 

point1[0] += diplacementVector[0]; 
point1[1] += diplacementVector[1]; 

point2[0] -= diplacementVector[0]; 
point2[1] -= diplacementVector[1]; 
+0

Я понимаю, что меня заводит! – membersound

Смежные вопросы