6

我有 1 行有 2 个已知点:

PointF p2_1 = new PointF();
p2_1.X = 100; // x1
p2_1.Y = 150; // y1

PointF p2_2 = new PointF();
p2_2.X = 800; // x2
p2_2.Y = 500; // y2

float dx = p2_2.X - p2_1.X;
float dy = p2_2.Y- p2_1.Y;

float slope = dy / dx; // slope m
float intercept = p2_1.Y - slope * p2_1.X; // intercept c 
// y = mx + c

我想向左(或向右)迭代 10 个像素到 1 行(在 x1,y1 处)。

在此处输入图像描述

红点是我想要处理的。例子:

for (int i = 10; i > 0; i--)
{
   // start with distant coordinates
   PointF new_point = new Point(); // (grab x,y, coords accordingly)
   // repeat until I'm at (x1, y1)
}

我如何遍历这些坐标?

4

2 回答 2

3

垂直向量将采用以下形式: [-dy dx] 其中 [dx dy] 是您的当前向量。获得垂直向量后,您可以对其进行归一化(单位长度),然后按设定的量进行迭代:

float perp_dx = -dy / Math.sqrt(dy*dy+dx*dx); //normalized
float perp_dy = dx /Math.sqrt(dy*dy+dx*dx); //normalized

for(int i =0; /*logic here*/){
 float new_x = perp_dx * i + start_x;
 float new_y = perp_dy * i + start_y;
}
于 2013-04-11T19:10:45.443 回答
2

垂直于给定线的线的斜率等于给定线斜率的负倒数。

给定线的斜率为(y2-y1) / (x2-x1)

所以红线有斜率= - 1 / [(y2-y1) / (x2-x1)]

所以这条线上的每个第i个点都有坐标(xi,yi),其中

  (yi - y1) / (xi - x1)  = - 1 / (y2-y1) / x2-x1)

并且是一个像素固定距离的倍数(x1,y1),即,其中

   (yi-y1) * (yi-y1) +  (xi-x1) * (xi-x1) =  i * i

我要做的是计算这个增量向量 (dx, dy) 对于红线上的每个点或在红线上的每个点之间是什么,然后在一个迭代 10 次的循环中继续添加该增量。

于 2013-04-11T19:08:43.673 回答