首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离散化直线的算法

离散化直线的算法
EN

Stack Overflow用户
提问于 2016-11-22 14:50:15
回答 2查看 179关注 0票数 0

对于一些由点(x_1, y_1)(x_2, y_2)限制的给定直线,有什么算法方法和途径可以将这条直线离散成偶数个线段?

从数学上讲,我想人们会这样做:

(1)找出长度,

(2)除以N段数,然后

(3)根据该数据计算分段点,

但我想知道是否有更好的或更多的‘计算机科学’的方法来解决这个问题。

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

EN

回答 2

Stack Overflow用户

发布于 2016-11-22 14:57:38

不需要计算和使用长度。

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

代码语言:javascript
复制
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并在循环中使用此值

票数 3
EN

Stack Overflow用户

发布于 2016-11-22 15:17:00

下面是一个示例,说明如何从std::cin中读取两个点(和N),然后计算这些段,最后将它们打印到std::cout。

代码语言:javascript
复制
#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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40735471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档