Перемещение между двумя конкретными точками - PullRequest
0 голосов
/ 08 октября 2009

Я хочу узнать координаты X и Y точки, которая находится на полпути между точкой и другой точкой в ​​VB.net. Так как нет свойства "direction" (которое сделало бы это намного проще ...), я понятия не имею, как это сделать.

Код C # также приемлем, хотя я бы предпочел vb, так как для этого не требуется порт.

Спасибо за помощь, это беспокоит меня как сумасшедшего!

Ответы [ 6 ]

4 голосов
/ 08 октября 2009

Помните свою математику ?

x = (x0 + x1) / 2
y = (y0 + y1) / 2

Это даст вам координаты точки на полпути между (x0, y0) и (x1, y1).

2 голосов
/ 08 октября 2009

Вы должны быть в состоянии просто взять среднее из двух очков:

Dim point1 as New Point(5, 2)
Dim point2 as New Point(25, 32)

Dim middlepoint as New Point((point1.X + point2.X)/2, (point1.Y + point2.Y)/2)

Если вы пытаетесь перейти от одной точки к другой, вам, вероятно, понадобится что-то похожее на:

Public Function MoveBetweenPoints(Point point1, Point point2, Double percentage) As Point
    Dim x as Double
    Dim y as Double

    x = point1.X * (1.0-percentage) + point2.X * percentage
    y = point1.Y * (1.0-percentage) + point2.Y * percentage

    Return New Point(x,y)
End Function

Это позволит вам перейти от точки 1 к точке 2, указав процент перемещения (от 0 до 1)

1 голос
/ 08 октября 2009

Простая линейная интерполяция сработает.

R = P1 + (P2 - P1) * f;

R - позиция результата, P1 - первая позиция, P2 - вторая позиция и f коэффициент интерполяции (0.5 для точной середины).

Для точки, просто примените к обеим координатам, если ваш класс точек не поддерживает базовые математические операции (такие как System.Drawing.Point)

Dim R as Point;
R.X = P1.X + (P2.X - P1.X) * f;
R.Y = P1.Y + (P2.Y - P1.Y) * f;
1 голос
/ 08 октября 2009

Если точка первая (x1, y1) и точка два - (x2, y2), то средняя точка равна (0,5 * (x1 + x2), 0,5 * (y1 + y2)).

0 голосов
/ 08 октября 2009
Point A=new Point(1,1);
Point B=new Point(6,8);
Point C=new Point(); //between point
C.X = (A.x+B.x)/2;
C.Y = (A.y+B.Y)/2;

Конечно, если бы вы случайно использовали полярные координаты, вам нужна другая формула:

d = sqrt(r1**2+r2**2-2(r1)(r2)cos[theta2-theta1]).

** Х означает «к власти Х»: D

0 голосов
/ 08 октября 2009

Это на самом деле довольно просто.

PointF p1 = new PointF(..., ...);
PointF p2 = new PointF(..., ...);

PointF midPoint = new PointF((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2);

Середина двух точек (x 1 , y 1 ) и (x 2 , y 2 ) - это точки ((x 1 + x 2 ) / 2, (y 1 + y 2 ) / 2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...