📄 linedx.java
字号:
/* while */
}
/* mid pointine */
//////////////////////////////////////////////////////////////////////////////
public void InterBresenhamlineX(int x0, int y0, int x1, int y1,
Graphics g, int w1, int w2) {
int x, y, dx, dy, e, j = 0;
g.setColor(ForeColor);
boolean bg;
if (y1 > y0) {
bg = true;
}
else {
bg = false;
}
if (bg) {
dy = y1 - y0;
}
else {
dy = y0 - y1;
}
dx = x1 - x0;
e = -dx;
x = x0;
y = y0;
for (int i = 0; i <= dx; i++) {
if (j == 8) {
j = 0;
}
if ('1' == sLineStyle[LineStyle].charAt(j)) {
for (int w = w2; w < w1; w++) {
g.drawLine(x, y + w, x, y + w);
}
}
j++;
x++;
e = e + 2 * dy;
if (e >= 0) {
if (bg) {
y++;
}
else {
y--;
}
e = e - 2 * dx;
}
}
}
//////////////////////////////////////////////////////////////////////////////
public void InterBresenhamlineY(int x0, int y0, int x1, int y1,
Graphics g, int w1, int w2) {
int x, y, dx, dy, e, j = 0;
g.setColor(ForeColor);
boolean bg;
if (x1 > x0) {
bg = true;
}
else {
bg = false;
}
if (bg) {
dy = x1 - x0;
}
else {
dy = x0 - x1;
}
dx = y1 - y0;
e = -dx;
x = x0;
y = y0;
for (int i = 0; i <= dx; i++) {
if (j == 8) {
j = 0;
}
if ('1' == sLineStyle[LineStyle].charAt(j)) {
for (int w = w2; w < w1; w++) {
g.drawLine(x + w, y, x + w, y);
}
}
j++;
y++;
e = e + 2 * dy;
if (e >= 0) {
if (bg) {
x++;
}
else {
x--;
}
e = e - 2 * dx;
}
}
}
///////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
public void LineDDAXDemo(int x0, int y0, int x1, int y1, Graphics g)
/* 假定x0<x1,-1<=k<=1 */
{
int x, t, w;
float dx, dy, y, k;
int tmp = 2 * DemoWidth;
g.setColor(ForeColor);
dx = x1 - x0;
dy = y1 - y0;
k = (dy / dx) * tmp;
y = y0;
////////////////////////////////////
for (x = x0; x <= x1; x = x + tmp) {
////////////////////////////////////////////
//注意步长???????????
t = Math.round(y);
g.fillRect(x, t, DemoWidth, DemoWidth);
y += k;
}
}
///////////////////////////////////////////////////////////////////////////////
public void LineDDAYDemo(int x0, int y0, int x1, int y1, Graphics g)
/* 假定-1<=1/k<=1 */
{
int y, t;
float dx, dy, x, k;
int tmp = 2 * DemoWidth;
g.setColor(ForeColor);
dx = x1 - x0;
dy = y1 - y0;
k = (dx / dy) * tmp;
x = x0;
//////////////////////////////////////////////////
for (y = y0; y <= y1; y = y + tmp) {
////////////////////////////////////////////
//注意步长???????????
t = Math.round(x);
g.fillRect(t, y, DemoWidth, DemoWidth);
x += k;
}
}
////////////////////////////////////////////////////////////////////////////
public void MidpointineXDemo(int x0, int y0, int x1, int y1,
Graphics g) {
int a, b, d1, d2, d, x, y;
int tmp = 2 * DemoWidth;
g.setColor(ForeColor);
boolean bg;
if (y1 > y0) {
bg = false;
}
else {
bg = true;
}
if (bg) {
a = y1 - y0;
}
else {
a = y0 - y1;
}
b = x0 - x1;
d = 2 * a - b;
d2 = 2 * (a - b);
d1 = 2 * a;
x = x0;
y = y0;
g.fillRect(x, y, DemoWidth, DemoWidth);
while (x < x1) {
x += tmp;
if (d < 0) {
if (bg) {
y -= tmp;
}
else {
y += tmp;
}
d += d2;
}
else {
d += d1;
}
g.fillRect(x, y, DemoWidth, DemoWidth);
}
/* while */
}
/* mid pointine */
////////////////////////////////////////////////////////////////////////////
public void MidpointineYDemo(int x0, int y0, int x1, int y1,
Graphics g) {
int a, b, d1, d2, d, x, y;
g.setColor(ForeColor);
int tmp = 2 * DemoWidth;
boolean bg;
if (x1 > x0) {
bg = false;
}
else {
bg = true;
}
if (bg) {
a = x1 - x0;
}
else {
a = x0 - x1;
}
b = y0 - y1;
d = 2 * a - b;
d2 = 2 * (a - b);
d1 = 2 * a;
x = x0;
y = y0;
g.fillRect(x, y, DemoWidth, DemoWidth);
while (y < y1) {
y += tmp;
if (d < 0) {
if (bg) {
x -= tmp; //x--;
}
else {
x += tmp; //x++;
}
d += d2;
}
else {
d += d1;
}
g.fillRect(x, y, DemoWidth, DemoWidth);
}
}
/* mid pointine */
//////////////////////////////////////////////////////////////////////////////
public void InterBresenhamlineXDemo(int x0, int y0, int x1, int y1,
Graphics g) {
int x, y, dx, dy, e;
g.setColor(ForeColor);
int tmp = 2 * DemoWidth;
boolean bg;
if (y1 > y0) {
bg = true;
}
else {
bg = false;
}
if (bg) {
dy = y1 - y0;
}
else {
dy = y0 - y1;
}
dx = x1 - x0;
e = -dx;
x = x0;
y = y0;
for (int i = 0; i <= dx; i += tmp) {
g.fillRect(x, y, DemoWidth, DemoWidth);
x += tmp;
e = e + 2 * dy;
if (e >= 0) {
if (bg) {
y += tmp;
}
else {
y -= tmp;
}
e = e - 2 * dx;
}
}
}
//////////////////////////////////////////////////////////////////////////////
public void InterBresenhamlineYDemo(int x0, int y0, int x1, int y1,
Graphics g) {
int x, y, dx, dy, e;
g.setColor(ForeColor);
int tmp = 2 * DemoWidth;
boolean bg;
if (x1 > x0) {
bg = true;
}
else {
bg = false;
}
if (bg) {
dy = x1 - x0;
}
else {
dy = x0 - x1;
}
dx = y1 - y0;
e = -dx;
x = x0;
y = y0;
for (int i = 0; i <= dx; i += tmp) {
g.fillRect(x, y, DemoWidth, DemoWidth);
y += tmp;
e = e + 2 * dy;
if (e >= 0) {
if (bg) {
x += tmp;
}
else {
x -= tmp;
}
e = e - 2 * dx;
}
}
}
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
public void scale(double sx, double sy) {
epoint.x = (int)(epoint.x*sx); spoint.x = (int)(spoint.x*sx);
epoint.y = (int)(epoint.y*sy); spoint.y = (int)(spoint.y*sy);
}
public void rotate(double theta, int x,int y) {
double c,s,a,b;
int oldx,oldy;
c = Math.cos(theta); s = Math.sin(theta);
a = x*(1-c)+y*s; b = y*(1-c)-x*s;
oldx = epoint.x; oldy = epoint.y;
epoint.x = (int)(oldx*c-oldy*s+a);
epoint.y = (int)(oldx*s+oldy*c+b);
oldx = spoint.x; oldy = spoint.y;
spoint.x = (int)(oldx*c-oldy*s+a);
spoint.y = (int)(oldx*s+oldy*c+b);
}
public void translate(int x, int y){
epoint.x += x; spoint.x += x;
epoint.y += y; spoint.y += y;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -