- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我有 3 个顶点:(20, 20), (10, 60), (50, 60)
如何绘制三角形?
我想首先你需要连接顶点才能得到三角形的边。这可以通过获取斜率来完成吗?然后找到最左边的顶点,开始在 y 方向上递增并沿 x 方向设置像素,直到到达右边缘?
伪代码会非常有帮助,但我也很难理解基本思想。
最佳答案
有多种方法可以做到这一点。其中一种更简单的方法称为半空间方法,涉及在三角形周围绘制边界矩形,然后迭代矩形的所有像素。如果像素位于三角形内部,则为像素着色。
示例:
//Initialize these however you want to
int x1;
int x2;
int x3;
int y1;
int y2;
int y3;
//Bounding rectangle
int minX = min(x1, x2, x3)
int maxX = max(x1, x2, x3)
int minY = min(y1, y2, y3)
int maxY = max(y1, y2, y3)
for(int x = minX; x <= maxX; x++)
{
for(int y = minY; y <= maxY; y++)
{
//If point in triangle
if((x1 - x2) * (y - y1) - (y1 - y2) * (x - x1) > 0 &&
(x2 - x3) * (y - y2) - (y2 - y3) * (x - x2) > 0 &&
(x3 - x1) * (y - y3) - (y3 - y1) * (x - x3) > 0)
{
//Color pixel
}
}
}
min 和 max 方法必须由您实现,如果您不喜欢上面显示的方法,您可以使用任何您喜欢的方法来确定一个点是否在三角形中。
关于java - 有人可以解释一下使用 DDA 扫描线给定 3 个顶点绘制三角形的逻辑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21869708/
我的代码对 slope=1 正常工作,但对其他斜率无效。它为 1 以外的斜率绘制水平线或垂直线。这段代码有什么问题。我们将不胜感激。 #include #include #include int
我的 DDA(Digital Differential Analyzer)算法实现代码适用于绘制斜率小于 45o 的线,但在线斜率超过 45o。 对于 > 45o 的角度,它的行为就像一条虚线 代码
我读过 DDA .但我刚刚遇到symmetric DDA 这个术语。它是什么 ?它与 DDA 有何不同? 最佳答案 DDA(数字差分分析仪)算法用于找出任意给定两点之间的线性插值点(即直线)。现在,由
假设我有 3 个顶点:(20, 20), (10, 60), (50, 60) 如何绘制三角形? 我想首先你需要连接顶点才能得到三角形的边。这可以通过获取斜率来完成吗?然后找到最左边的顶点,开始在 y
文件 line_3.c: #include //#include #include void lineDDA(int, int, int, int); void main() { int
当网页变小时,我希望在中间显示 DDA.AC 文本。 text-align: center; for any tag it does not change. https://jsfiddle.net/
我是一名优秀的程序员,十分优秀!