我正在做一些图像处理,我有一个四边形的 4 个点的坐标。(类似于梯形)我怎样才能得到里面所有像素的坐标?顺便说一句,我正在使用Java。谢谢!
3 回答
您需要扫描线多边形填充。
这是关于该主题的快速 PDF 讲座:
http://www.cs.binghamton.edu/~reckert/460/lect11_2009-areafill-transformations.pdf
这是一个网页示例,其中包含一些示例 C 代码和基本思想的一个很好的说明:
http://alienryderflex.com/polygon_fill/
这是简短的表格。把你的四边形线分成左边和右边的线。对于每个恒定的 Y 坐标行,找出左行的交叉点;找出正确线的交叉点;两个交叉点之间的那一行上的所有像素都在梯形内。
就历史而言,这种事情最初(并且可能仍然是)用于在软件中渲染 3d 场景。我想它当时有一个不同的名字,但我不记得了。但是,您实际上不必绘制像素;无论您是否绘制它们,该算法都会为您提供像素。
http://wiki.processing.org/w/Find_which_side_of_a_line_a_point_is_on有关于如何找到一个点在直线的哪一侧的伪代码。
如果您的四边形由 A、B、C、D 点定义 - 检查您的点是否在 AB、BC、CD 和 DA 的“左侧”应该会给您答案。
编辑:哎呀,我把你的问题读成找到了一个点,而不是所有的点。希望这仍然有帮助。
这是一个碰撞检测问题吗?您想知道给定点是否在形状内吗?还是您真的想要形状内所有点的坐标?