java – Line Rasterization / 4-bresenham
发布时间:2020-05-24 03:11:37 所属栏目:Java 来源:互联网
导读:对于碰撞测试,我需要光栅线. bresenham算法几乎按照预期的方式工作,但有一个缺陷就是产生一条线: 我需要: 我目前的实施(基于http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm#Simplification): public boolean isInsideLine(int x1, int y1, in
|
对于碰撞测试,我需要光栅线. bresenham算法几乎按照预期的方式工作,但有一个缺陷就是产生一条线: 我需要: 我目前的实施(基于http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm#Simplification): public boolean isInsideLine(int x1,int y1,int x2,int y2) {
final int dx = abs(x2 - x1),dy = abs(y2 - y1);
final int sx = x1 < x2 ? 1 : -1,sy = y1 < y2 ? 1 : -1;
int err = dx - dy;
while (true) {
if (isInside(x1,y1)) //Lookup in pixel array
return true;
if (x1 == x2 && y1 == y2)
break;
final int e2 = err << 1;
if (e2 > -dy) {
err -= dy;
x1 += sx;
}
if (e2 < dx) {
err += dx;
y1 += sy;
}
}
return false;
}
是否有我可以使用的其他行光栅化算法,或者有人知道如何修改bresenham吗? 解决方法也许它会很有用,我的非整数终点版本.它是GridMap类的一种方法,我用它来对几何形状进行空间索引,以加速2D地图中的碰撞检测.int GridMap::insertLine( int lineId,double ax,double ay,double bx,double by ){
// get index of endpoints in GridMap
int ix = getIx( ax );
int iy = getIy( ay );
int ixb = getIx( bx );
int iyb = getIy( by );
// insert endpoints to GridMap
insert( lineId,ix,iy );
insert( lineId,ixb,iyb );
// raster central part of the line
double dx = fabs( bx - ax );
double dy = fabs( by - ay );
int dix = ( ax < bx ) ? 1 : -1;
int diy = ( ay < by ) ? 1 : -1;
double x=0,y=0;
while ( ( ix != ixb ) && ( iy != iyb ) ) {
if ( x < y ) {
x += dy;
ix += dix;
} else {
y += dx;
iy += diy;
}
insert( lineId,iy );
}
}; (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
