5

これは幾何学の質問です。

2 つの点 A と B の間に直線があり、それを k 等分したいと考えています。A と B の間の線を分割する点の座標が必要です。

どんな助けでも大歓迎です。

どうもありがとう!

4

2 に答える 2

19

AとBの加重平均が必要です。

C(t) = A * (1-t) + B * t

または、2-D

Cx = Ax * (1-t) + Bx * t
Cy = Ay * (1-t) + By * t    
  • t=0 のとき、A を取得します。
  • t=1 のとき、B を取得します。
  • t=.25 の場合、A から B までの 25% のポイントです。

したがって、直線を k 等分するには、ループを作成して C を求めます。t=0/k、t=1/k、t=2/k、...、t=k/k の場合

于 2010-08-22T17:32:34.813 に答える
1
    for(int i=0;i<38;i++)
    {
        Points[i].x = m_Pos.x * (1 - (i/38.0)) + m_To.x * (i / 38.0);
        Points[i].y = m_Pos.y * (1 - (i/38.0)) + m_To.y * (i / 38.0);
        if(i == 0 || i == 37 || i == 19) dbg_msg("CLight","(%d)\nPos(%f,%f)\nTo(%f,%f)\nPoint(%f,%f)",i,m_Pos.x,m_Pos.y,m_To.x,m_To.y,Points[i].x,Points[i].y);
    }

プリント:

[4c7cba40][CLight]: (0)
Pos(3376.000000,1808.000000)
To(3400.851563,1726.714111)
Point(3376.000000,1808.000000)
[4c7cba40][CLight]: (19)
Pos(3376.000000,1808.000000)
To(3400.851563,1726.714111)
Point(3388.425781,1767.357056)
[4c7cba40][CLight]: (37)
Pos(3376.000000,1808.000000)
To(3400.851563,1726.714111)
Point(3400.851563,1726.714111)

これは問題ないように見えますが、私のプログラムは機能しません:D. しかし、あなたの方法はうまくいきます

于 2010-08-31T08:23:43.110 に答える