2016-11-22 8 views
0

(x_1, y_1),(x_2, y_2)という点で結ばれたいくつかの線について、この線を偶数のセグメントに離散化するためにどのようなアルゴリズム方法およびアプローチが利用可能であるか?数学的離散化アルゴリズムのアルゴリズム

、私は1つがわずかになると仮定:(3)、このデータから

を区分点を計算
(1)の長さを見つけるのセグメントNの数によって、
(2)分割し、次いで

しかし、これ以上の "コンピュータサイエンス"指向のアプローチがあるのだろうかと思います。

私は初年度の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から2つの点(と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; 
    } 
}