离散线的算法

Algorithm for Discretizing Line

本文关键字:算法      更新时间:2023-10-16

对于某些给定线(x_1, y_1)(x_2, y_2)绑定的给定线,哪些算法方法和方法可用于将此行分散到偶数段中?

数学上,我想一个人会:
(1)找到长度,
(2)除以n个段数,然后
(3)从此数据计算段点

,但我想知道是否有更好或更多的"计算机科学"方法。

我是第一年的CS学生,所以我不知道我在寻找什么,甚至从哪里开始寻找。

无需计算和使用长度。

您可以通过简单的线性插值找到中间点(对于n个相等的段):

for i = 1 to N - 1
    Point[i].X = X1 + (X2 - X1) * i / N
    Point[i].Y = Y1 + (Y2 - Y1) * i / N

如果您担心有效性,请预先计算X_coeff = (X2 - X1) / N并在周期内使用此值

这是一个如何从std :: cin读取两个点(和n)的示例,然后计算段,最后将它们打印到std :: cout。

#include <iostream>
#include <vector>
struct point
{
    double x;
    double y;
};
int main()
{
    point P1;
    point P2;
    size_t N;
    std::cin >> P1.x >> P1.y;
    std::cin >> P2.x >> P2.y;
    std::cin >> N;
    std::vector<point> segments(N + 1);
    double x_diff = (P2.x - P1.x) / N;
    double y_diff = (P2.y - P1.y) / N;
    for (size_t i = 1; i < segments.size(); ++i)
    {
        segments[i].x = P1.x + x_diff * i;
        segments[i].y = P1.y + y_diff * i;
    }
    segments[0] = P1;
    for (size_t i = 1; i < segments.size(); ++i)
    {
        std::cout << "(" << segments[i-1].x << "," << segments[i-1].y << ") - ";
        std::cout << "(" << segments[i].x << "," << segments[i].y << ")" << std::endl;
    }
}