C++ 直线离散化算法
对于由点C++ 直线离散化算法,c++,algorithm,geometry,algebra,C++,Algorithm,Geometry,Algebra,对于由点(x_1,y_1),(x_2,y_2)约束的某些给定直线,有哪些算法和方法可用于将该直线离散为偶数段 从数学上讲,我想人们只会: (1) 找到长度, (2) 除以N个分段数,然后 (3) 根据该数据计算线段点 但我想知道是否有更好或更多的面向“计算机科学”的方法来解决这个问题 我是CS一年级的学生,所以我不知道我在寻找什么,甚至不知道从哪里开始寻找。没有必要计算和使用长度 您可以通过简单的线性插值找到中间点(对于N个相等的线段): for i = 1 to N - 1 Point
(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并在循环内使用此值无需计算和使用长度 您可以通过简单的线性插值找到中间点(对于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;
}
}
#包括
#包括
结构点
{
双x;
双y;
};
int main()
{
P1点;
P2点;
尺寸;
标准:cin>>P1.x>>P1.y;
std::cin>>P2.x>>P2.y;
标准:cin>>N;
std::向量段(N+1);
双x_差异=(P2.x-P1.x)/N;
双y_差异=(P2.y-P1.y)/N;
对于(size_t i=1;i std::cout下面是一个示例,说明如何从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;
}
}
#包括
#包括
结构点
{
双x;
双y;
};
int main()
{
P1点;
P2点;
尺寸;
标准:cin>>P1.x>>P1.y;
std::cin>>P2.x>>P2.y;
标准:cin>>N;
std::向量段(N+1);
双x_差异=(P2.x-P1.x)/N;
双y_差异=(P2.y-P1.y)/N;
对于(size_t i=1;i