Question: 嘿,我正在编写一个Java代码来创建一个抛物线星,它由大小为400x400的画布上的直线组成.有人能帮帮我吗?下面是这个图应该是什么样子的,下面我将提供给你我到目前为止得到的代码: Graph with the values: a) numLinesQuadrant = 2, b) numLinesQuadrant = 5, c) numLinesQuadrant = 11, d) numLinesQuadrant = 21

My Java code: 导入codedraw. Codedraw; 导入coddraw.;

public class TryOutTwo { public void void main(String []){

    CodeDraw myDrawObj = new CodeDraw(400,  400);
    //add range?
    int numlinesQuadrant = 2;
    int xSpacing = 200 / (numlinesQuadrant);
    int ySpacing = 200 / (numlinesQuadrant);

    for (int i = 0; i < numlinesQuadrant; i++) {
        boolean isEven = (i % 2 == 0);
                int startX = 200 + (i * xSpacing);
                int startY = 200 + (i * ySpacing);
                int endX = 200 - (i * xSpacing);
                int endY = 200 + (i * ySpacing);
                myDrawObj.setColor(Palette.GREEN);
                if (isEven) {
                    myDrawObj.drawLine(200, startY, endX, 200);
                } else {
                    myDrawObj.drawLine(startX, 200, 200, endY);
                }
                int startX2 = 200 + (i * xSpacing);
                int startY2 = 200 + (i * ySpacing);
                int endX2 = 200 + (i * xSpacing);
                int endY2 = 200 + (i * ySpacing);
                myDrawObj.setColor(Palette.CYAN);
                if (isEven) {
                    myDrawObj.drawLine(200, startY2, endX2, 200);
                } else {
                    myDrawObj.drawLine(endX2,200,200,endY2);
                    }
                int startX3 = 200 - (i * xSpacing);
                int startY3 = 200 - (i * ySpacing);
                int endX3 = 200 - (i * xSpacing);
                int endY3 = 200 - (i * ySpacing);
                myDrawObj.setColor(Palette.ORANGE);
                if (isEven) {
                    myDrawObj.drawLine(200, startY3, endX3, 200);
                } else {
                    myDrawObj.drawLine(startX3, 200, 200, endY3);
                }
                int startX4 = 200 + (i * xSpacing);
                int startY4 = 200 - (i * ySpacing);
                int endX4 = 200 + (i * xSpacing);
                int endY4 = 200 - (i * ySpacing);
                myDrawObj.setColor(Palette.MAGENTA);
                if (isEven) {
                    myDrawObj.drawLine(200, startY4, endX4, 200);
                } else {
                    myDrawObj.drawLine(startX4, 200, 200, endY4);
                }
        }

    myDrawObj.setColor(Palette.BLACK);
    myDrawObj.setLineWidth(2);
    myDrawObj.drawLine(0, 200, 400, 200);
    myDrawObj.drawLine(200, 0, 200, 400);

    myDrawObj.show();
}

}

Also, here is my Task Description if it helps: 我需要做的是:

  • 修改main方法以实现以下目标:

    • 生成类似于图中的图像.程序的每一次运行都应该产生一个图像.
    • 图像大小应为400 × 400像素,点P(x = 0,y = 0)位于左上角.使用CodeDraw myDrawObj = new CodeDraw(400, 400)创建图形窗口.
  • 附加说明:

    • 引入一个类型为int的变量numLinesQuadrant来确定每个象限的线数.每个轴上直线端点之间的间距应取决于此变量.不需要从命令行输入.
    • 使用一个循环来绘制整个图像.
    • 使用myDrawObj.setColor(Palette.GREEN)和类似的方法将绘图 colored颜色 设置为绿色、青色、MAGENTA或橙色.
    • 循环结束后,在图像的中心画一条黑色的水平和垂直线,都是2像素厚(myDrawObj.setLineWidth(2)).
  • 顺便说一句,我正在使用'CodeDraw'文档:https://krassnig.github.io/CodeDrawJavaDoc/v4.0.x/codedraw/CodeDraw.html

我就是找不出一个公式来均匀地分布每条线的起点和终点.当我加更多的线条时,它会变得混乱.每个象限中有两种类型的线.4个坐标中的2个需要灵活计算,其他两个可以保持不变.至少我是这么认为的.为了让它们相应地移动,均匀地分布,我需要一个坚实的公式,我出于某种原因无法弄清楚.

推荐答案

这是一个JavaFX版本.

关键是按比例移动线条.基本上,线的长度是相同的,但它们在x轴和y轴上的位置是不同的.

try loopMax = 3、loopMax = 6、loopMax = 12和loopMax = 24.

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
 
public class App extends Application {
 
    double viewWidth = 500.0;
    double viewHeight = 500.0;
    double minX = 0.0;
    double midX = viewWidth / 2.0;
    double maxX = viewWidth;
    double minY = 0;
    double midY = viewHeight / 2.0;
    double maxY = viewHeight;
    double loopMax = 24.0;
    
    
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Drawing Operations Test");
        Group root = new Group();
        Canvas canvas = new Canvas(viewWidth, viewHeight);
        GraphicsContext gc = canvas.getGraphicsContext2D();
        
        root.getChildren().add(canvas);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
        
        drawAxisX(gc);
        drawAxisY(gc);
        double fraction = 0;
        for(int i = 1; i <= loopMax ; i++)
        {
            drawShape(gc, fraction);
            System.out.println(fraction);
            fraction = i / loopMax;
        }
        
    }

    private void drawAxisX(GraphicsContext gc) {
        gc.setFill(Color.BLACK);
        gc.setStroke(Color.BLACK);
        gc.setLineWidth(5);
        gc.strokeLine(minX, midY, maxX, midY);        
    }
    
     private void drawAxisY(GraphicsContext gc) {
        gc.setFill(Color.BLACK);
        gc.setStroke(Color.BLACK);
        gc.setLineWidth(5);
        gc.strokeLine(midX, minY, midX, maxY);        
    }
     
     private void drawShape(GraphicsContext gc,double fraction)
     {
        gc.setFill(Color.GREEN);
        gc.setStroke(Color.GREEN);
        gc.setLineWidth(1);
        gc.strokeLine(minX + (midX * fraction), midY, midX, minY + (midY * (1 - fraction))); //upper /
        
        
        gc.setFill(Color.ORANGE);
        gc.setStroke(Color.ORANGE);
        gc.strokeLine(minX + (midX * fraction), midY, midX, maxY - (midY * (1 - fraction)));
        
        gc.setFill(Color.VIOLET);
        gc.setStroke(Color.VIOLET);
        gc.strokeLine(maxX - (midX * fraction), midY, midX, maxY - (midY * (1 - fraction)));
        
        gc.setFill(Color.CYAN);
        gc.setStroke(Color.CYAN);
        gc.strokeLine(maxX - (midX * fraction), midY, midX, minY + (midY * (1 - fraction)));        
     }
}

输出

enter image description here

Java相关问答推荐

计算战舰沉船/船只的问题(Java)

当耗时的代码完成时,Circular ProgressIndicator显示得太晚

Spring安全实现多个SQL表身份验证

是否需要关闭Executors返回的执行器.newVirtualThreadPerTaskExecutor()?

OpenJDK、4K显示和文本质量

Java中不同包中的类之间的配置共享

CSS应用于一个端点,但不应用于Thymeleaf中的另一个端点

Java中如何根据Font.canDisplay方法对字符串进行分段

滚动视图&不能在alert 对话框中工作(&Q;&Q;)

Spring Boot@Cachebale批注未按预期工作

对于几乎不涉及逻辑的请求,您是否应该使用命令模式?

GSON期间的Java类型擦除

第二次按下按钮后,我需要将按钮恢复到其原始状态,以便它可以再次工作

try 从REST API返回对象列表时出错

扩展视图高度,并将其拖动到较低的视图上,而不是将其向下推?

为什么有两种实现来检索数组类的组件类型?

为什么StandardOpenOption.CREATE不能通过Ubuntu在中小企业上运行?

如果执行@BeForeEach#repository.save(),则测试中的UnitTest最终UUID会发生更改

Java返回生成器的实现

一条Java记录可以保存多少个字段?