Предполагая, что все ребра горизонтальны или вертикальны, я бы просто рассмотрел каждый возможный случай отдельно.
Получите векторы направления.
Vector2 from = me - previous;
Vector2 to = next - me;
Я также предполагаю, что всегда есть очередь. То есть, если from
горизонтально, то to
вертикально и наоборот. Либо x
, либо y
равно 0.0f
, а другая координата не равна нулю. Я также предполагаю, что ось X указывает вправо, а ось Y - вверх. Предполагая, что точки перечислены по часовой стрелке.
float x, y;
if (from.x > 0.0f) { // from points to the right
y = me.y - distance;
if (to.y > 0.0f) x = me.x + distance else x = me.x - distance;
} else if (from.x < 0.0f) { // from points to the left
y = me.y + distance;
if (to.y > 0.0f) x = me.x + distance else x = me.x - distance;
} else if (from.y > 0.0f) { // from points upwards
x = me.x + distance;
if (to.x > 0.0f) y = me.y - distance else y = me.y + distance;
} else { // from.y < 0.0f, points downwards
x = me.x - distance;
if (to.x > 0.0f) y = me.y - distance else y = me.y + distance;
}
Vector2 me_inner = new Vector2(x, y);
Я надеюсь, что все знаки были правильными.