Необходимо знать о глюке. Любой класс, который Вы раздаете как DataObject в перетащить/отбросить операции, должен быть сериализуемым. Таким образом, при попытке передать объект, и он не работает, удостоверьтесь, что он может быть сериализирован, поскольку это - почти наверняка проблема. Это ловило меня пару раз!
Я думаю, что это принадлежит MathOverflow, но я отвечу, поскольку это ваш первый пост. Сначала вы вычисляете вектор от x1y1 до x2y2:
float vx = x2 - x1;
float vy = y2 - y1;
Затем вычисляете длину:
float mag = sqrt(vx*vx + vy*vy);
Нормализуете вектор до единичной длины:
vx /= mag;
vy /= mag;
Наконец вычисляете новый вектор, который равен x2y2 + vxvy * (mag + расстояние).
*px = (int)((float)x1 + vx * (mag + distance));
*py = (int)((float)y1 + vy * (mag + distance));
Вы можете опустить некоторые вычисления, умножая вместо этого на расстояние / величину.