Как обрезать линию между 2 точками?
Я хочу нарисовать линию на холсте. Поэтому я использую два клика от пользователя, чтобы определить начальную точку S
и конечная точка E
,
ctx.moveTo(sx, sy);
ctx.lineTo(ex, ey);
Я также хочу вычесть статическое смещение по обе стороны линии, например static int offset = 10;
Моя проблема: как я могу узнать о направлении (север, восток, юг, запад), к которому я должен добавить или вычесть смещение?
Если линия идет сверху вниз, я должен был бы применить (0, +10)
в начальной точке S и (0, -10)
на конечной точке. Ситуация усложняется, когда линия проходит по диагонали через координатное пространство.
Возможно, это может быть "простой" математической проблемой, но мне не хватает правильных ключевых слов, чтобы найти какие-либо решения.
1 ответ
Вам просто нужно использовать базовую математику.
- Найти смещения по осям X и Y
- Найти угол тета
- Создать вектор смещения
- Добавьте или возьмите это из ваших очков
Дайте мне знать, если это не сработает.
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];