RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 893094
Accepted
Alexander
Alexander
Asked:2020-10-15 01:26:11 +0000 UTC2020-10-15 01:26:11 +0000 UTC 2020-10-15 01:26:11 +0000 UTC

如何画一个方形螺旋?

  • 772

请告诉我如何画一个方形螺旋?一开始我试着用线条来画,但不太成功,也许是这个图的公式?目前我在正方形的帮助下绘制,但结果不是我需要的。

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);
    }
}

方形螺旋

java
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Mark
    2020-10-15T08:01:15Z2020-10-15T08:01:15Z

    此处借用 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);
            }
        }
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5