【发布时间】:2020-09-01 13:25:47
【问题描述】:
我想创建金字塔左、右、中心角,在 GridPane 中使用圆形,我已经完成了左角,但花了 2 天时间创建右角和中心角,但没有运气。
如果有人知道或能给我一些算法想法,我将不胜感激,请帮助我!
输出已经完成左角
使用以下代码
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
Circle circle = new Circle();
circle.setStroke(Paint.valueOf(Color.BLACK.toString()));
circle.radiusProperty().bind(ballsModel.radiusProperty());
circle.strokeWidthProperty().bind(ballsModel.strokeProperty());
circle.fillProperty().bind(Bindings.createObjectBinding(() -> Paint.valueOf(ballsModel.getColor().name())));
grid.addRow(i, circle);
}
}
需要弄清楚以下模式:
【问题讨论】:
-
提示:计算放置圆圈的索引;不要尝试使用
addRow或addColumn,而是add(Node, int column, int row)。addColumn/addRow不适用于添加孩子,如果有“单元格”的索引较小保持为空,例如最后一张图片中 (1, 3) 处的 cricle;顺便说一句,我不会为你解决你的家庭作业。不过,找出正确的索引范围应该不会太难。 -
@fabian 这就是我两天以来一直在尝试做的事情,但我需要一些插图代码来完成
-
也许尝试为三角形的边创建不等式会有所帮助?
x >= 0、y <= 4和y >= x用于解决问题;这意味着y >= 0(结合第一个和最后一个等式,以防不明显),因此您可以创建一个外循环for (int y = 0; y <= 4; ++y) { ... };现在给定 y,您可以得出x的有效范围,将x >= 0和y >= x组合为0 <= x <= y导致for (int x = 0; x <= y; ++x) { ... }的内部循环对于提出不等式,two points form 应该有所帮助。 -
另外,至少对于最后一个形状,您可以认为这是在穿过中心的垂直线上镜像的第一个形状,即点可以转换为
(x, y) -> (k-x, y)以获得合适的常数k...第二个形状可以被认为是最后一个形状和第一个稍微小一点的版本向下和向右移动的组合,但是如果您可以根据 y 确定 x 的上限或下限,那么您已经您也许可以根据对称性确定另一个界限...