在两个特定点之间移动

时间:2009-10-08 01:07:44

标签: vb.net geometry

我想在VB.net中找出点和点之间的点的X和Y位置。由于没有“方向”属性(这会使这更容易......),我不知道如何做到这一点。

C#代码也可以接受,但我更喜欢vb,因为它不需要端口。

感谢您的帮助,这让我感到很疯狂!

6 个答案:

答案 0 :(得分:4)

Remember your math

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

这将为您提供(x0,y0)和(x1,y1)之间的点的坐标。

答案 1 :(得分:2)

你应该能够取两点的平均值:

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

通过指定要移动的百分比(从0到1),这将允许您从point1移动到point2

答案 2 :(得分:1)

如果第一点(x1,y1)和第二点是(x2,y2),则中点为(0.5 *(x1 + x2),0.5 *(y1 + y2))。

答案 3 :(得分:1)

简单的线性插值可以解决问题。

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;

答案 4 :(得分:0)

这实际上非常简单。

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)。

答案 5 :(得分:0)

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]).

** X表示“对X权力”:D