Добавил:
Eatmore
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:отчеты по лабораторным работам / лабораторная работа №3, 8 сем. / lab3 / lab2
.java import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class lab2 extends Applet implements AdjustmentListener, ItemListener,
MouseListener {
double r = 2.0, x = 0, y = 0;
List xField = new List();
List yField = new List();
Scrollbar rField = new Scrollbar(Scrollbar.HORIZONTAL, (int) r, 0, 2, 6);
Label rValue = new Label("r = " + r, Label.CENTER);
private DatagramSocket socket;
Label t;
Panel p;
private static final int IMAGE_WIDTH = 240;
private static final int IMAGE_HEIGHT = IMAGE_WIDTH;
private static final int BUFFER_SIZE = 8 * 3;
public lab2() {
setLayout(new GridLayout(1, 0, 5, 5));
t = new Label();
t.setSize(IMAGE_WIDTH, IMAGE_HEIGHT);
t.setAlignment(Label.CENTER);
t.addMouseListener(this);
add(t);
p = new Panel();
add(p);
initP();
}
public void paint(Graphics g) {
super.paint(g);
g = t.getGraphics();
drawImg(g);
}
private void drawImg(Graphics g) {
g.setClip(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
g.setColor(new Color(241, 243, 248)); // цвет фона...
g.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT); // заливаем фон...
g.setColor(new Color(51, 153, 255)); // цвет фигуры...
g.fillRect(IMAGE_WIDTH / 3, IMAGE_HEIGHT / 6, IMAGE_WIDTH / 6,
IMAGE_HEIGHT / 3 + 1);
Polygon p = new Polygon();
p.addPoint(IMAGE_WIDTH / 6, IMAGE_HEIGHT / 2);
p.addPoint(IMAGE_WIDTH / 2, IMAGE_HEIGHT / 3 * 2);
p.addPoint(IMAGE_WIDTH / 2, IMAGE_HEIGHT / 2);
g.fillPolygon(p);
g.fillArc(IMAGE_WIDTH / 3, IMAGE_HEIGHT / 3, IMAGE_WIDTH / 3,
IMAGE_HEIGHT / 3, -90, 90);
// далее рисуем оси и подписываем их...
g.setColor(Color.black);
g.drawLine(0, IMAGE_HEIGHT / 2, IMAGE_WIDTH, IMAGE_HEIGHT / 2);
g.drawLine(IMAGE_WIDTH / 2, IMAGE_HEIGHT, IMAGE_WIDTH / 2, 0);
g.drawLine(IMAGE_WIDTH - 5, IMAGE_HEIGHT / 2 - 2, IMAGE_WIDTH,
IMAGE_HEIGHT / 2);
g.drawLine(IMAGE_WIDTH - 5, IMAGE_HEIGHT / 2 + 2, IMAGE_WIDTH,
IMAGE_HEIGHT / 2);
g.drawLine(IMAGE_WIDTH / 2 - 2, 5, IMAGE_WIDTH / 2, 0);
g.drawLine(IMAGE_WIDTH / 2 + 2, 5, IMAGE_WIDTH / 2, 0);
g.drawString("x", IMAGE_WIDTH - 5, IMAGE_HEIGHT / 2 - 5);
g.drawString("y", IMAGE_WIDTH / 2 + 5, 5);
String[] s = {"-r", "-r/2", "", "r/2", "r"};
for (int i = 1; i < 6; i++) {
g.drawLine(IMAGE_WIDTH / 2 - 1, i * IMAGE_HEIGHT / 6,
IMAGE_WIDTH / 2 + 1,
i * IMAGE_HEIGHT / 6);
g.drawLine(i * IMAGE_WIDTH / 6, IMAGE_HEIGHT / 2 - 1,
i * IMAGE_WIDTH / 6,
IMAGE_HEIGHT / 2 + 1);
g.drawString(s[i - 1], IMAGE_WIDTH / 2 + 5,
i * IMAGE_HEIGHT / 6 + 5);
g.drawString(s[i - 1], i * IMAGE_WIDTH / 6 - 5,
IMAGE_HEIGHT / 2 - 5);
}
drawDot(g);
}
private void drawDot(Graphics g) {
int dx = IMAGE_WIDTH / 2;
int dy = IMAGE_WIDTH / 2;
double sacleX = IMAGE_WIDTH / 3 / r;
double sacleY = IMAGE_HEIGHT / 3 / r;
dx += x * sacleX;
dy += -y * sacleY;
if (check(x, y, r))
g.setColor(Color.RED);
else
g.setColor(Color.green);
g.fillRect(dx - 1, dy - 1, 3, 3);
}
private void initP() {
for (int i = -3; i <= 5; i++) {
xField.add("" + (double) i);
yField.add("" + (double) i);
}
xField.select(3);
yField.select(3);
GridBagConstraints c = new GridBagConstraints();
GridBagLayout gridbag = new GridBagLayout();
p.setLayout(gridbag);
c.insets = new Insets(5, 5, 5, 5);
c.fill = GridBagConstraints.HORIZONTAL;
addLabel(c, gridbag, "X :");
c.weightx = 0;
c.gridwidth = GridBagConstraints.REMAINDER;
xField.addItemListener(this);
gridbag.setConstraints(xField, c);
p.add(xField);
c.weightx = 2;
c.gridwidth = GridBagConstraints.REMAINDER;
addLabel(c, gridbag, "Y :");
yField.addItemListener(this);
c.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(yField, c);
p.add(yField);
addLabel(c, gridbag, "r :");
c.gridwidth = GridBagConstraints.REMAINDER;
rField.addAdjustmentListener(this);
gridbag.setConstraints(rField, c);
p.add(rField);
c.weightx = 2;
c.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(rValue, c);
p.add(rValue);
}
private void addLabel(GridBagConstraints c, GridBagLayout gridbag,
String caption) {
Label label = new Label(caption, Label.RIGHT);
c.gridwidth = GridBagConstraints.RELATIVE;
gridbag.setConstraints(label, c);
p.add(label);
}
public void adjustmentValueChanged(AdjustmentEvent e) {
r = e.getValue();
rValue.setText("r = " + r);
repaint();
}
public void itemStateChanged(ItemEvent e) {
y = Double.parseDouble(yField.getSelectedItem());
x = Double.parseDouble(xField.getSelectedItem());
repaint();
}
public boolean check(double x, double y, double r) {
try {
if (socket == null) {
socket = new DatagramSocket(9998, InetAddress.getLocalHost());
}
socket.setSoTimeout(1000);
ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream(
BUFFER_SIZE);
DataOutputStream outputStream = new DataOutputStream(outputBuffer);
outputStream.writeDouble(x);
outputStream.writeDouble(y);
outputStream.writeDouble(r);
DatagramPacket sendPacket = new DatagramPacket(outputBuffer.
toByteArray(), outputBuffer.size(),
InetAddress.getLocalHost(), 9999);
socket.send(sendPacket);
byte[] inputBuffer = new byte[1];
DatagramPacket recievePacket = new DatagramPacket(inputBuffer,
inputBuffer.length);
socket.receive(recievePacket);
DataInputStream dataInputStream = new DataInputStream(
new ByteArrayInputStream(inputBuffer, 0, 1));
boolean result = dataInputStream.readBoolean();
return result;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
public void mouseClicked(MouseEvent e) {
int cx = e.getX() - IMAGE_WIDTH / 2;
int cy = e.getY() - IMAGE_HEIGHT / 2;
double sacleX = IMAGE_WIDTH / 3 / r;
double sacleY = IMAGE_HEIGHT / 3 / r;
x = cx / sacleX;
y = -cy / sacleY;
repaint();
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class lab2 extends Applet implements AdjustmentListener, ItemListener,
MouseListener {
double r = 2.0, x = 0, y = 0;
List xField = new List();
List yField = new List();
Scrollbar rField = new Scrollbar(Scrollbar.HORIZONTAL, (int) r, 0, 2, 6);
Label rValue = new Label("r = " + r, Label.CENTER);
private DatagramSocket socket;
Label t;
Panel p;
private static final int IMAGE_WIDTH = 240;
private static final int IMAGE_HEIGHT = IMAGE_WIDTH;
private static final int BUFFER_SIZE = 8 * 3;
public lab2() {
setLayout(new GridLayout(1, 0, 5, 5));
t = new Label();
t.setSize(IMAGE_WIDTH, IMAGE_HEIGHT);
t.setAlignment(Label.CENTER);
t.addMouseListener(this);
add(t);
p = new Panel();
add(p);
initP();
}
public void paint(Graphics g) {
super.paint(g);
g = t.getGraphics();
drawImg(g);
}
private void drawImg(Graphics g) {
g.setClip(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
g.setColor(new Color(241, 243, 248)); // цвет фона...
g.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT); // заливаем фон...
g.setColor(new Color(51, 153, 255)); // цвет фигуры...
g.fillRect(IMAGE_WIDTH / 3, IMAGE_HEIGHT / 6, IMAGE_WIDTH / 6,
IMAGE_HEIGHT / 3 + 1);
Polygon p = new Polygon();
p.addPoint(IMAGE_WIDTH / 6, IMAGE_HEIGHT / 2);
p.addPoint(IMAGE_WIDTH / 2, IMAGE_HEIGHT / 3 * 2);
p.addPoint(IMAGE_WIDTH / 2, IMAGE_HEIGHT / 2);
g.fillPolygon(p);
g.fillArc(IMAGE_WIDTH / 3, IMAGE_HEIGHT / 3, IMAGE_WIDTH / 3,
IMAGE_HEIGHT / 3, -90, 90);
// далее рисуем оси и подписываем их...
g.setColor(Color.black);
g.drawLine(0, IMAGE_HEIGHT / 2, IMAGE_WIDTH, IMAGE_HEIGHT / 2);
g.drawLine(IMAGE_WIDTH / 2, IMAGE_HEIGHT, IMAGE_WIDTH / 2, 0);
g.drawLine(IMAGE_WIDTH - 5, IMAGE_HEIGHT / 2 - 2, IMAGE_WIDTH,
IMAGE_HEIGHT / 2);
g.drawLine(IMAGE_WIDTH - 5, IMAGE_HEIGHT / 2 + 2, IMAGE_WIDTH,
IMAGE_HEIGHT / 2);
g.drawLine(IMAGE_WIDTH / 2 - 2, 5, IMAGE_WIDTH / 2, 0);
g.drawLine(IMAGE_WIDTH / 2 + 2, 5, IMAGE_WIDTH / 2, 0);
g.drawString("x", IMAGE_WIDTH - 5, IMAGE_HEIGHT / 2 - 5);
g.drawString("y", IMAGE_WIDTH / 2 + 5, 5);
String[] s = {"-r", "-r/2", "", "r/2", "r"};
for (int i = 1; i < 6; i++) {
g.drawLine(IMAGE_WIDTH / 2 - 1, i * IMAGE_HEIGHT / 6,
IMAGE_WIDTH / 2 + 1,
i * IMAGE_HEIGHT / 6);
g.drawLine(i * IMAGE_WIDTH / 6, IMAGE_HEIGHT / 2 - 1,
i * IMAGE_WIDTH / 6,
IMAGE_HEIGHT / 2 + 1);
g.drawString(s[i - 1], IMAGE_WIDTH / 2 + 5,
i * IMAGE_HEIGHT / 6 + 5);
g.drawString(s[i - 1], i * IMAGE_WIDTH / 6 - 5,
IMAGE_HEIGHT / 2 - 5);
}
drawDot(g);
}
private void drawDot(Graphics g) {
int dx = IMAGE_WIDTH / 2;
int dy = IMAGE_WIDTH / 2;
double sacleX = IMAGE_WIDTH / 3 / r;
double sacleY = IMAGE_HEIGHT / 3 / r;
dx += x * sacleX;
dy += -y * sacleY;
if (check(x, y, r))
g.setColor(Color.RED);
else
g.setColor(Color.green);
g.fillRect(dx - 1, dy - 1, 3, 3);
}
private void initP() {
for (int i = -3; i <= 5; i++) {
xField.add("" + (double) i);
yField.add("" + (double) i);
}
xField.select(3);
yField.select(3);
GridBagConstraints c = new GridBagConstraints();
GridBagLayout gridbag = new GridBagLayout();
p.setLayout(gridbag);
c.insets = new Insets(5, 5, 5, 5);
c.fill = GridBagConstraints.HORIZONTAL;
addLabel(c, gridbag, "X :");
c.weightx = 0;
c.gridwidth = GridBagConstraints.REMAINDER;
xField.addItemListener(this);
gridbag.setConstraints(xField, c);
p.add(xField);
c.weightx = 2;
c.gridwidth = GridBagConstraints.REMAINDER;
addLabel(c, gridbag, "Y :");
yField.addItemListener(this);
c.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(yField, c);
p.add(yField);
addLabel(c, gridbag, "r :");
c.gridwidth = GridBagConstraints.REMAINDER;
rField.addAdjustmentListener(this);
gridbag.setConstraints(rField, c);
p.add(rField);
c.weightx = 2;
c.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(rValue, c);
p.add(rValue);
}
private void addLabel(GridBagConstraints c, GridBagLayout gridbag,
String caption) {
Label label = new Label(caption, Label.RIGHT);
c.gridwidth = GridBagConstraints.RELATIVE;
gridbag.setConstraints(label, c);
p.add(label);
}
public void adjustmentValueChanged(AdjustmentEvent e) {
r = e.getValue();
rValue.setText("r = " + r);
repaint();
}
public void itemStateChanged(ItemEvent e) {
y = Double.parseDouble(yField.getSelectedItem());
x = Double.parseDouble(xField.getSelectedItem());
repaint();
}
public boolean check(double x, double y, double r) {
try {
if (socket == null) {
socket = new DatagramSocket(9998, InetAddress.getLocalHost());
}
socket.setSoTimeout(1000);
ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream(
BUFFER_SIZE);
DataOutputStream outputStream = new DataOutputStream(outputBuffer);
outputStream.writeDouble(x);
outputStream.writeDouble(y);
outputStream.writeDouble(r);
DatagramPacket sendPacket = new DatagramPacket(outputBuffer.
toByteArray(), outputBuffer.size(),
InetAddress.getLocalHost(), 9999);
socket.send(sendPacket);
byte[] inputBuffer = new byte[1];
DatagramPacket recievePacket = new DatagramPacket(inputBuffer,
inputBuffer.length);
socket.receive(recievePacket);
DataInputStream dataInputStream = new DataInputStream(
new ByteArrayInputStream(inputBuffer, 0, 1));
boolean result = dataInputStream.readBoolean();
return result;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
public void mouseClicked(MouseEvent e) {
int cx = e.getX() - IMAGE_WIDTH / 2;
int cy = e.getY() - IMAGE_HEIGHT / 2;
double sacleX = IMAGE_WIDTH / 3 / r;
double sacleY = IMAGE_HEIGHT / 3 / r;
x = cx / sacleX;
y = -cy / sacleY;
repaint();
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
Соседние файлы в папке lab3