Wiki内検索
最近更新したページ
2011-08-24
2010-05-18
2010-05-03
2010-02-18
2010-02-10
2010-02-09
2010-02-08
2010-02-07
2010-02-02
2009-12-24
2009-12-05
2009-07-05
2009-07-03
最新コメント
MenuBar1 by stunning seo guys
MenuBar1 by stunning seo guys
MenuBar1 by stunning seo guys
MenuBar1 by awesome things!
MenuBar1 by awesome things!
MenuBar1 by awesome things!
MenuBar1 by check it out
MenuBar1 by awesome things!
MenuBar1 by check it out
MenuBar1 by stunning seo guys
Menu
Programming Tips
タグ

BrezLine


直線の書き方2


大きな数を掛けて、整数で足し算をしていきます。
割合は縦を基準に計算します。



int[] tateArr;

void calcLineTate(int p1x, int p1y, int p2x, int p2y)
{
int x16_x1 = p1x << 16;//16bit倍
int x16_y1 = p1y << 16;
int x16_x2 = p2x << 16;
int x16_y2 = p2y << 16;

int len = Math.abs(p2y - p1y) + 1;

int zouka_x = (x16_x2 - x16_x1) / len;
int zouka_y = (x16_y2 - x16_y1) / len;

int tmp_x = x16_x1;
int tmp_y = x16_y1;

for (int i = 0; i < len; i++, tmp_x += zouka_x, tmp_y += zouka_y)
{
tateArr[tmp_y >> 16] = tmp_x >> 16;
}
}

void drawLineTate(Vertex p1, Vertex p2, int[] pix)
{
tateArr = new int[hei];

int p1x = (int)p1.x + cenWid;//あらかじめ座標調節
int p1y = hei - (int)p1.y - cenHei;//マイナスの場合が出ないようにする。
int p2x = (int)p2.x + cenWid;
int p2y = hei - (int)p2.y - cenHei;

int startY, endY, startX, endX;//始点と到着点に区別
if (p1y < p2y) { startY = p1y; endY = p2y; startX = p1x; endX = p2x;}
else { startY = p2y; endY = p1y; startX = p2x; endX = p1x;};

calcLineTate(startX, startY, endX, endY);

int x1, y1;
for (int i = startY; i < endY; i++) {//描画
x1 = tateArr[i];
y1 = i;
pix[y1 * wid + x1] = 255 << 24 | 0 << 16 | 0 << 8 | 255;
}
}
2008年01月07日(月) 19:11:20 Modified by eruvasu




スマートフォン版で見る