2016-11-22 77 views
0

对于某些由点(x_1, y_1),(x_2, y_2)约束的给定行,有什么算法方法和方法可用于将该行离散化为偶数段?离散行的算法

在数学上,我想一个只想:
(1)找到的长度,
(2)除以N个段,并且然后
(3)从该数据计算分段点,

但我想知道是否有更好的或更“计算机科学”为导向的方法。

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

回答

3

没有必要计算和使用长度。

你可以找到中间点(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和使用周期

0

这里面该值为例如如何从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; 
    } 
}