You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现四象限均匀分布线条的抛物线星型图形技术求助

解决CodeDraw抛物线星型图形的端点均匀分布问题

核心公式推导

画布为400×400,左上角为(0,0),因此中心坐标为(200, 200)。要让坐标轴上的端点均匀分布,关键是计算固定步长:

  1. 步长计算:每个坐标轴从中心到边缘的距离为200像素,若每象限有numLinesQuadrant条线,则端点间隔步长为:
    double step = 200.0 / numLinesQuadrant;
    
    用浮点数计算避免整数除法导致的精度丢失,保证无论numLinesQuadrant取何值,端点间距始终均匀。
  2. 端点坐标公式:对循环变量i(从1到numLinesQuadrant),四个象限的端点对分别为:
    • 右上象限:右x轴端点(200 + i*step, 200) ↔ 上y轴端点(200, 200 - i*step)
    • 左上象限:左x轴端点(200 - i*step, 200) ↔ 上y轴端点(200, 200 - i*step)
    • 左下象限:左x轴端点(200 - i*step, 200) ↔ 下y轴端点(200, 200 + i*step)
    • 右下象限:右x轴端点(200 + i*step, 200) ↔ 下y轴端点(200, 200 + i*step)

完整实现代码

import codedraw.CodeDraw;

public class ParabolaStar {
    public static void main(String[] args) {
        // 画布尺寸
        int canvasSize = 400;
        // 每象限线条数量,可按需调整
        int numLinesQuadrant = 10;
        // 中心坐标
        int centerX = canvasSize / 2;
        int centerY = canvasSize / 2;
        // 计算均匀步长
        double step = (double) centerX / numLinesQuadrant;

        CodeDraw cd = new CodeDraw(canvasSize, canvasSize);
        // 设置线条颜色(示例用深蓝色)
        cd.setColor(0, 50, 100);

        // 单循环绘制所有象限的线条
        for (int i = 1; i <= numLinesQuadrant; i++) {
            // 计算当前步长对应的偏移量
            double offset = i * step;

            // 右上象限线条
            cd.drawLine(centerX + offset, centerY, centerX, centerY - offset);
            // 左上象限线条
            cd.drawLine(centerX - offset, centerY, centerX, centerY - offset);
            // 左下象限线条
            cd.drawLine(centerX - offset, centerY, centerX, centerY + offset);
            // 右下象限线条
            cd.drawLine(centerX + offset, centerY, centerX, centerY + offset);
        }

        // 绘制2像素粗的黑色中心十字线
        cd.setColor(0, 0, 0);
        cd.setLineWidth(2);
        // 水平中线
        cd.drawLine(0, centerY, canvasSize, centerY);
        // 垂直中线
        cd.drawLine(centerX, 0, centerX, canvasSize);

        cd.show();
    }
}

关键说明

  • 单循环实现:通过一次循环处理四个象限的线条,避免冗余代码。
  • 均匀分布保证:步长step基于中心到边缘的距离和线条数量动态计算,无论numLinesQuadrant增大或减小,端点始终均匀分布在坐标轴上。
  • 坐标适配:完全符合CodeDraw左上角为(0,0)的坐标规则,中心十字线覆盖整个画布。

内容的提问来源于stack exchange,提问作者user22142988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:51:52