скажите пожалуйста, как можно нарисовать квадратную спираль ? Я сперва пробовал с помощью линий нарисовать, но не совсем получилось, может быть формула для этой фигуры ? На данные момент нарисовал с помощью квадрата, но результат не тот какой нужен.
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Line2D;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Spiral {
private static JFrame frame;
private static int x, x2;
private static int y, y2;
private static int x1;
private static int y1;
private static int n;
private static int step;
private static Line2D.Double line = null;
public Spiral(){
x = 300;
y = 200;
x2 = 400;
y2 = 200;
step = 30;
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter number: ");
n = Integer.parseInt(reader.readLine()) ;
frame = new JFrame("Spiral");
frame.setSize(600,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GraphicsComponent gc = new GraphicsComponent();
frame.add(gc);
frame.setVisible(true);
}
static class GraphicsComponent extends JComponent {
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
x1 = 250;
y1 = 50;
int size = n * n;
for (int i = 0; i < n; i++) {
Rectangle rectangle = new Rectangle(x1, y1, size, size);
size -= 10;
x1 += 5;
y1 += 5;
g2.draw(rectangle);
}
/*
int dir = 0;
for (int i = 1; i <= 6; i++) {
if (dir == 0){
line = new Line2D.Double(x, y, x2 ,y2);
drawLine(g2);
dir++;
}
else if(dir == 1){
x = x2;
y = y;
x2 = x2;
y2 += STEP;
line = new Line2D.Double(x, y, x2 ,y2);
drawLine(g2);
dir++;
}
else if(dir == 2){
x = y2 + STEP;
y = y2;
x2 -= 0;
y2 = y2;
line = new Line2D.Double(x, y, x2 ,y2);
drawLine(g2);
dir++;
}
else if(dir == 3){
x = x;
y = y;
x2 = x;
y2 -= STEP;
line = new Line2D.Double(x, y, x2 ,y2);
drawLine(g2);
dir++;
}
else if(dir == 4){
x = x;
y = y;
x2 = x;
y2 -= STEP;
line = new Line2D.Double(x, y, x2 ,y2);
drawLine(g2);
dir++;
}
else if(dir == 5){
x = x;
y = y2;
x2 += STEP;
y2 = y;
line = new Line2D.Double(x, y, x2 ,y2);
drawLine(g2);
dir = 1;
}
}
*/
}
}
private static void drawLine(Graphics2D g2){
g2.setColor(Color.RED);
g2.fill(line);
g2.draw(line);
}
}
Рисование линии в Swing позаимствовал здесь , а сам алгоритм не очень сложный: длина стороны спирали dist
увеличивается после каждых двух шагов на фиксированную величину step
.
class Success extends JFrame {
public Success() {
JPanel panel = new JPanel();
getContentPane().add(panel);
setSize(450, 450);
}
@Override
public void paint(Graphics g) {
super.paint(g); // fixes the immediate problem.
Graphics2D g2 = (Graphics2D) g;
int step = 5; // расстояние между витками
int dist = step;
int x = 200, y = 200; // центр
Line2D lin;
for (int i = 0; i < 20; i++) {
// шаг вправо
lin = new Line2D.Float(x, y, x + dist, y);
x += dist;
g2.draw(lin);
// шаг вверх
lin = new Line2D.Float(x, y, x, y + dist);
y += dist;
g2.draw(lin);
// увеличиваем длину витка
dist += step;
// шаг влево
lin = new Line2D.Float(x, y, x - dist, y);
x -= dist;
g2.draw(lin);
// шаг вниз
lin = new Line2D.Float(x, y, x, y - dist);
y -= dist;
g2.draw(lin);
// увеличиваем длину витка
dist += step;
}
}
public static void main(String[] args) {
Success s = new Success();
s.setVisible(true);
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть строка из которой нужно выбрать все слова, которые начинаются с большой буквы и записать в новую строку, а с маленькой также в новую строкуПонимаю,...
Моя маленькая программа работает в консоли и читает данные из файла и показывает пользователю условно говоря и при соблюдении некоторых...
Добрый день столкнулся с такой проблемой , что hover не работает полноценно в svgПытаюсь менять цвет при наведении на path или класс какой нибудь: