Java实现四象限均匀分布线条的抛物线星型图形技术求助
解决CodeDraw抛物线星型图形的端点均匀分布问题
核心公式推导
画布为400×400,左上角为(0,0),因此中心坐标为(200, 200)。要让坐标轴上的端点均匀分布,关键是计算固定步长:
- 步长计算:每个坐标轴从中心到边缘的距离为200像素,若每象限有
numLinesQuadrant条线,则端点间隔步长为:
用浮点数计算避免整数除法导致的精度丢失,保证无论double step = 200.0 / numLinesQuadrant;numLinesQuadrant取何值,端点间距始终均匀。 - 端点坐标公式:对循环变量
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)
- 右上象限:右x轴端点
完整实现代码
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
相关产品推荐
相关产品推荐

