📄 circledx.java
字号:
package graphics0;
import java.awt.*;
/**
* <p>Title: computer graphics </p>
* <p>Description: homeworks</p>
* <p>Copyright: Copyright (c) 2004 </p>
* <p>Company: shu</p>
* @author dxf
* @version 1.0
*/
public class CircleDx extends Object2D{
private int Ra, Rb;
Point spoint;
int DrawMethod ;
void drawDemo(Graphics Canvas){
////////////////////////////////////////////////////////
switch (DrawMethod) {
case 0: { //circle
MidPointCircleDemo(spoint.x,spoint.y,Ra, Canvas);
break;
}
case 1: {//ellipse
MidPointEllipseDemo(spoint.x, spoint.y, Ra, Rb, Canvas);
break;
}
}
}
void draw(Graphics Canvas) {
int w1,w2,w;
///////////////////////////////////////////////
//line width
w = LineWidth % 2;
if (1 == w) {
w1 = (LineWidth + 1) / 2;
w2 = 0 - (LineWidth - 1) / 2;
}
else {
w1 = LineWidth / 2;
w2 = 0 - w1;
}
////////////////////////////////////////////////////////
switch (DrawMethod) {
case 0: { //circle
MidPointCircle(spoint.x,spoint.y,Ra, ForeColor, Canvas,w1,w2);
break;
}
case 1: {//ellipse
MidPointEllipse(spoint.x, spoint.y, Ra, Rb, Canvas,w1,w2);
break;
}
}
};
public void SetRa (int width) {
Ra = width;
}
public int GetRa () {
return(Ra);
}
public void SetRb (int width) {
Rb = width;
}
public int GetRb () {
return(Rb);
}
boolean IsInside(Point p0) {
return (true);
};
public CircleDx() {
spoint = new Point(0,0);
DrawMethod = 0;
}
public CircleDx(Point s,int d,int ra,int rb, Color c0,Color c1,
int w, int l,boolean f) {
spoint = new Point(s);
DrawMethod = d;
Ra = ra;
Rb = rb;
ForeColor = c0;
BackgroundColor = c1;
LineWidth = w;
LineStyle = l;
Filled = f;
}
///////////////////////////////////////////////////////////////////////////////
public void CirclePoints(int x0,int y0,int x,int y,Graphics g)
{
g.setColor(ForeColor);
g.drawLine(x0+x,y0+ y, x0+x, y0+y);g.drawLine(x0+ y, y0+x,x0+ y,y0+x);
g.drawLine(x0-x, y0+y, x0-x, y0+y);g.drawLine(x0+y, y0-x, x0+y,y0-x);
g.drawLine(x0+x, y0-y, x0+x, y0-y);g.drawLine(x0-y, y0+x,x0-y,y0+x);
g.drawLine(x0-x, y0-y, x0-x, y0-y);g.drawLine(x0-y, y0-x,x0-y,y0-x);
if (Filled){
g.setColor(BackgroundColor);
g.drawLine(x0+y,y0+ x,x0+ x, y0+y);
g.drawLine(x0+ x, y0+y,x0+x, y0-y);
g.drawLine(x0+x, y0-y,x0+y, y0-x);
g.drawLine(x0+y, y0-x,x0-y, y0-x);
g.drawLine(x0-y, y0-x,x0-x, y0-y);
g.drawLine(x0-x, y0-y,x0-x, y0+y);
g.drawLine(x0-x, y0+y,x0-y, y0+x);
g.drawLine(x0-y, y0+x,x0+y,y0+ x);
}
}
///////////////////////////////////////////////////////////////////////////////
public void MidPointCircle(int x0,int y0,int r, Color color0,
Graphics g, int w1,int w2) {
int x,y, j=1;
float d;
x=0;
y=r;
d=(float)(1.25-r);
g.setColor(color0);
for (int w=w2;w<w1;w++) {
CirclePoints (x0,y0,x,y+w,g);
}
while(x<=y) {
if(d<0) d+=2*x+3;
else { d+=2*(x-y)+5; y--;}
x++;
if (j==8) j=0;
if ('1'==sLineStyle[LineStyle].charAt(j))
for (int w=w2;w<w1;w++) {
CirclePoints (x0,y0,x,y+w,g);
}
j++;
}
}
///////////////////////////////////////////////////////////////////////////////
public void EllipsePoints(int x0,int y0,int x,int y,
Graphics g)
{
g.setColor(ForeColor);
g.drawLine(x0+x, y0+y, x0+x, y0+y);
g.drawLine(x0-x, y0+y, x0-x, y0+y);
g.drawLine(x0+x, y0-y, x0+x, y0-y);
g.drawLine(x0-x, y0-y, x0-x, y0-y);
if (Filled){
g.setColor(BackgroundColor);
g.drawLine(x0 - x , y0 - y ,x0 + x , y0 - y );
g.drawLine(x0 + x , y0 - y , x0 + x , y0 + y );
g.drawLine(x0 - x , y0 + y , x0 + x , y0 + y );
g.drawLine(x0 - x , y0 - y , x0 - x , y0 + y );
/* g.drawLine(x0-x+LineWidth,y0-y+LineWidth,x0+x-LineWidth,y0-y+LineWidth);
g.drawLine(x0+x-LineWidth,y0-y+LineWidth,x0+x-LineWidth,y0+y-LineWidth);
g.drawLine(x0-x+LineWidth,y0+y-LineWidth,x0+x-LineWidth,y0+y-LineWidth);
g.drawLine(x0-x+LineWidth,y0-y+LineWidth,x0-x-LineWidth,y0+y-LineWidth);*/
}
}
////////////////////////////////////////////////////////////////////////////////
public void MidPointEllipse(int x0,int y0,int ra,int rb,
Graphics g, int w1,int w2) {
int x,y,ra2,rb2,j=1;
float d,t;
ra2=ra*ra;rb2=rb*rb;
t = rb2+(float)(0.5*ra2);
x = 0; y = rb;
g.setColor( ForeColor);
d = (float)(rb2-ra2*rb+0.25*ra2);
for (int w=w2;w<w1;w++) {
EllipsePoints(x0, y0, x, y+w, g);
}
while(t +rb2*x < ra2*y) {
if(d<0) d+=2*rb2*x+3*rb2;
else { d+=2*rb2*x+3*rb2+2*ra2-2*ra2*y; y--;}
x++;
if (j==8) j=0;
if ('1'==sLineStyle[LineStyle].charAt(j))
for (int w=w2;w<w1;w++) {
EllipsePoints (x0,y0,x,y+w,g);
}
j++;
}
//////////////////////////////////////////////////
d =(float)(rb2*(x*x+x+0.25)+ra2*(y*y-2*y+1)-ra2*rb2);
while(y>0) {
if(d<0) { d+=rb2*(2*x+2)+ra2*(3-2*y);x++;}
else { d+=ra2*(3-2*y);}//??????????????//
y--;
if (j==8) j=0;
if ('1'==sLineStyle[LineStyle].charAt(j))
for (int w=w2;w<w1;w++) {
EllipsePoints(x0, y0, x+w, y, g);
}
j++;
}
}
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
public void CirclePointsDemo(int x0,int y0,int x,int y,Graphics g)
{
g.setColor(ForeColor);
g.fillRect(x0+x,y0+ y,DemoWidth,DemoWidth);
g.fillRect(x0+ y, y0+x,DemoWidth,DemoWidth);
g.fillRect(x0-x, y0+y, DemoWidth,DemoWidth);
g.fillRect(x0+y, y0-x,DemoWidth,DemoWidth);
g.fillRect(x0+x, y0-y, DemoWidth,DemoWidth);
g.fillRect(x0-y, y0+x,DemoWidth,DemoWidth);
g.fillRect(x0-x, y0-y,DemoWidth,DemoWidth);
g.fillRect(x0-y, y0-x,DemoWidth,DemoWidth);
}
///////////////////////////////////////////////////////////////////////////////
public void MidPointCircleDemo(int x0,int y0,int r,
Graphics g) {
int x,y, j=1;
float d;
x=0;
y=r;
int tmp=2*DemoWidth;
d=(float)(1.25-r);
g.setColor( ForeColor);
CirclePointsDemo (x0,y0,x,y,g);
while(x<=y) {
if (d < 0) {
d += 2 * x + 3;
}
else {
d += 2 * (x - y) + 5;
y-=tmp;
}
x+=tmp;
CirclePointsDemo(x0, y0, x, y , g);
}
}
///////////////////////////////////////////////////////////////////////////////
public void EllipsePointsDemo(int x0,int y0,int x,int y,
Graphics g)
{
g.setColor(ForeColor);
g.fillRect(x0+x, y0+y,DemoWidth,DemoWidth);
g.fillRect(x0-x, y0+y,DemoWidth,DemoWidth );
g.fillRect(x0+x, y0-y,DemoWidth,DemoWidth);
g.fillRect(x0-x, y0-y,DemoWidth,DemoWidth);
}
////////////////////////////////////////////////////////////////////////////////
public void MidPointEllipseDemo(int x0,int y0,int ra,int rb,
Graphics g) {
int x,y,ra2,rb2;
float d,t;
int tmp=2*DemoWidth;
ra2=ra*ra;rb2=rb*rb;
t = rb2+(float)(0.5*ra2);
x = 0; y = rb;
g.setColor(ForeColor);
d = (float)(rb2-ra2*rb+0.25*ra2);
EllipsePointsDemo(x0, y0, x, y, g);
while(t +rb2*x < ra2*y) {
if(d<0) {
d += 2 * rb2 * x + 3 * rb2;
}
else {
d += 2*rb2*x+3*rb2+2*ra2-2*ra2*y;
y-=tmp;
}
x+=tmp;
EllipsePointsDemo (x0,y0,x,y,g);
}
//////////////////////////////////////////////////
d =(float)(rb2*(x*x+x+0.25)+ra2*(y*y-2*y+1)-ra2*rb2);
while(y>0) {
if(d<0) {
d+=rb2*(2*x+2)+ra2*(3-2*y);
x+=tmp;
}
else {
d+=ra2*(3-2*y);
}
y-=tmp;
EllipsePointsDemo(x0, y0, x, y, g);
}
}
/////////////////////////////////////////////////////////////////////////////////
public void scale(double sx, double sy) {
Ra = (int)(Ra*sx); Rb = (int)(Rb*sy);
}
public void rotate(double theta, int x, int y) {
translate(x, y);
}
public void translate(int x, int y){
spoint.x += x; spoint.y += y;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -