迭代与另一条线垂直的N个点

Ale*_*lex 6 c# winforms

我有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
Run Code Online (Sandbox Code Playgroud)

我想迭代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)
}
Run Code Online (Sandbox Code Playgroud)

我如何迭代这些坐标?

mun*_*324 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;
}
Run Code Online (Sandbox Code Playgroud)