對於某些由點(x_1, y_1)
,(x_2, y_2)
約束的給定行,有什麼算法方法和方法可用於將該行離散化爲偶數段?離散行的算法
在數學上,我想一個只想:
(1)找到的長度,
(2)除以N個段,並且然後
(3)從該數據計算分段點,
但我想知道是否有更好的或更「計算機科學」爲導向的方法。
我是第一年CS學生,所以我不知道我在找什麼,甚至不知從哪裏開始看。
對於某些由點(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;
}
}