我有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)
}
如何迭代这些坐标?
答案 0 :(得分: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;
}
答案 1 :(得分: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次。