2

好的,让我尝试以最好的方式解释这一点。

我有两个点绘制为“A”和“B”,我正在尝试绘制第三个点“C”,以便它经过点“B”但沿相同的坡度。我有线条的角度,我会发布一些代码,但我真的不知道从哪里开始。

任何帮助都是极好的!

只是我有的一点代码

CGPoint vector = ccpSub(touchedPoint, fixedPoint);
CGFloat rotateAngle = -ccpToAngle(vector);
4

2 回答 2

2

假设你的意思是你需要添加第三个点 C 使得所有点都是共线的,你需要做的就是计算从 A 到 B 的向量,然后通过添加这个向量的倍数来生成一个新点到点 B。根据您希望 C 与 B 的距离选择倍数。

例如,假设 A = (2,2), B = (4,3)。然后从 A 到 B 的向量由 (2,1) 给出。

然后您需要做的就是计算出您的新点距 B 有多远,并将倍数 K*(2,1) 添加到您的 B 点,其中选择 K 以满足您的距离要求

我假设你是二维的,但同样的方法也适用于更高的维度

于 2012-06-15T23:56:29.493 回答
1

我的数学很生疏,但线性方程通常表示为 y=m*x+b,其中 m 是斜率,b 是 y 截距。您可以通过将 y 值的差除以 x 值的差来获得斜率 m,例如,如果 A = (2,2) 和 B = (4,3),则 m 为 ( 3-2)/(4-2) 或 0.5。然后,您可以求解 b 的线性方程,即 y 截距,即 b=ym*x,然后插入任一数据点,例如,如果我们插入点 A 的 x 和 y 值,则得到 b = 2 - 0.5 * 2 = 1。现在知道斜率 m(本例中为 0.5)和 y 截距 b(本例中为 1),您可以使用 y=m*x 计算任何 x 值的 y +b,在这种情况下 y=0.5*x+1。

所以,如果touchedPoint 和fixedPoint 是CGPoint,你可以计算fixedPoint 和touchPoint 的斜率和y 截距,如下所示:

double m = (fixedPoint.y - touchedPoint.y) / (fixedPoint.x - touchedPoint.x);
double b = fixedPoint.y - m * fixedPoint.x;

现在,你没有说你想如何确定第三个点 C 的位置。但是,例如,如果您知道这个新点 C 的 x 坐标,则可以计算落在同一直线上的 y 坐标,如下所示:

CGPoint pointC;
pointC.x = 400; // or set this to whatever you want
pointC.y = m * pointC.x + b;
于 2012-06-16T04:52:08.240 回答