将线分成相等的部分

发布于 2024-09-16 00:05:47 字数 108 浏览 10 评论 0原文

这是一道几何题。

我在两点 A 和 B 之间有一条线,想将其分成 k 个相等的部分。我需要分隔 A 和 B 之间线的点的坐标。

非常感谢任何帮助。

多谢!

This is a geometry question.

I have a line between two points A and B and want separate it into k equal parts. I need the coordinates of the points that partition the line between A and B.

Any help is highly appreciated.

Thanks a lot!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

染年凉城似染瑾 2024-09-23 00:05:47

你只需要 A 和 B 的加权平均值。

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

或者,在二维中

Cx = Ax * (1-t) + Bx * t
Cy = Ay * (1-t) + By * t    
  • ,当 t=0 时,你得到 A。
  • 当 t=1 时,你得到 B。
  • 当 t=0.25 时,你得到 25% 的点A 到 B
  • 等等

因此,要将线分成 k 个相等的部分,请进行循环并找到 C,对于 t=0/k,t=1/k,t=2/k,...,t=k/k

You just need a weighted average of A and B.

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

or, in 2-D

Cx = Ax * (1-t) + Bx * t
Cy = Ay * (1-t) + By * t    
  • When t=0, you get A.
  • When t=1, you get B.
  • When t=.25, you a point 25% of the way from A to B
  • etc

So, to divide the line into k equal parts, make a loop and find C, for t=0/k, t=1/k, t=2/k, ... , t=k/k

悲喜皆因你 2024-09-23 00:05:47
    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。
但你的方法很有效,谢谢

    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);
    }

prints:

[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)

which looks fine but then my program doesn't work :D.
but your method works so thanks

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文