查找整数坐标在2分之间
Finding integer coordinates between 2 points
我想在2组坐标点之间找到每个整数坐标点。
例如,我需要(2,15)(6,15)之间的坐标。它应该给我(3,15)(4,15)(5,15)。我找不到这样做的任何数学公式或C 代码。
我想要连接两个点x和y恰好为整数的两个点的所有坐标
(6,15)&(6,17) = (6,16)
坐标形成一个形状,例如矩形或交叉,基本思想是获得每组坐标之间的坐标。
Rectabgle Shape
Point [1] : (2, 17)
Point [2] : (2, 15)
Point [3] : (6, 15)
Point [4] : (6, 17)
Points on perimeter : (2, 16), (3, 15), (4, 15), (5, 15), (6, 16), (5, 17), (4, 17), (3, 17)
希望这可以更好地解释我想实现的目标。
试图在连接两个点x和y恰好是整数的两个点上找到所有坐标:
首先,正如另一位海报所指出的,您需要将其放在 y = mx + b
的表格中:
int StartX = 0;
int StartY = 10;
int EndX = 100;
int EndY = 110;
// m = rise / run
float m = 0.0;
if (EndX == StartX || EndY == StartY)
{
// add code here to handle the trivial cases
return;
}
int run = EndX - StartX;
int rise = EndY - StartY;
m = ((float) rise) / ((float) run);
// solve for b
// (start with y = mx + b, subtract mx from both sides)
float b = StartY - (m * StartX);
现在迭代:
// note: assumes EndX > StartX
for (int x = StartX; x <= EndX; ++x)
{
// solve for y
float y = (m * x) + b;
// round to nearest int
int rounded = (y > 0.0) ? floor(y + 0.5) : ceil(y - 0.5);
// convert int result back to float, compare
if ((float) rounded == y)
printf("(%d, %d)n", x, rounded);
}
此代码是未测试的,如果EndX < StartX
失败,但它应该使您启动。如果有人有更好的比较方法,请告诉我,我将包括。
编辑为添加
问题已经关闭,可能是因为它没有清楚地说明,但是我添加了一行以显示您需要处理StartX == EndX
和StartY == EndY
的位置。
如果您需要有效地绘制点,请使用Bresenham的算法或中点线算法。
如果您只需要点,则:
将点之间的界线表示为y = mx + c
将x
初始化为一个顶点的X坐标。从第一个x坐标到另一个迭代,根据您想要的点数增量x
,此x的y坐标为 m*x+c
未经测试,假设x1 < x2
struct Point {
double x;
double y;
};
Point* getPointsBetween(int x1, int y1, int x2, int y2, int numOfPoints) {
double m = (y2-y1)/(x2-x1);
double c = y1 - m*x1;
Point *points = new Point[num];
double increment = (x2-x1)/numOfPoints);
for(double i=x1+increment ; i<x2 ; i+=increment) {
points[i].x = i;
points[i].y = m*i + c;
}
return points;
}
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 是默认情况下分配给char数组常量的值
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 查找整数坐标在2分之间