Java语言程序设计基础篇_编程练习题**18.35(H 树分形)

目录

题目:**18.35(H 树分形)

代码示例

 代码解释

输出结果


题目:**18.35(H 树分形)

一个H 树分形(本章开始部分介绍过,如图18-1)如下定义:

1)从字母H开始。H的三条线长度一样,如图 18-1a 所示。

2)字母H(以它的 sans-serif 字体形式,H)有四个端点。以这四个端点为中心位置绘制一个 1 阶 H 树,如图18-1b所示。这些H的大小是包括这四个端点的 H的一半。

3)重复步骤2来创建2阶,3阶,…,n阶的H树,如图18-1c-d所示。

编写程序,绘制如图18-1所示的H树

  • 代码示例

编程练习题18_35HTreeFractal.java

package chapter_18;import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.css.Size;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Line;
import javafx.stage.Stage;public class 编程练习题18_35HTreeFractal extends Application{private double WIDTH = 500;private double HEIGHT = 500;private TextField tfOrder = new TextField();private int orderOfFractal = 0;Pane drawPane = new Pane();ObservableList<Node> FRACTAL = drawPane.getChildren();public static void main(String[] args) {Application.launch(args);}@Overridepublic void start(Stage primaryStage) throws Exception {Label lbOrder = new Label("Enter an Order",tfOrder);lbOrder.setContentDisplay(ContentDisplay.RIGHT);HBox hBox2 = new HBox(lbOrder,tfOrder);hBox2.setAlignment(Pos.CENTER);drawPane.setCenterShape(true);drawPane.setPrefHeight(HEIGHT-hBox2.getHeight());drawPane.setPrefHeight(WIDTH);BorderPane borderPane = new BorderPane();borderPane.setCenter(drawPane);borderPane.setBottom(hBox2);Scene scene = new Scene(borderPane,500, 500);primaryStage.setTitle(getClass().getName());primaryStage.setScene(scene);primaryStage.show();tfOrder.setOnKeyPressed(e ->{FRACTAL.clear();if(!tfOrder.getText().isEmpty()) {orderOfFractal = Integer.parseInt(tfOrder.getText());double baseHSize = HEIGHT/2 - 50;double centerX = drawPane.getWidth()/2-baseHSize/2;double centerY = drawPane.getHeight()/2-baseHSize/2;drawHTree(orderOfFractal,centerX,centerY,baseHSize);}});}private void drawH(double x,double y,double size) {Line leftVert = new Line(x,y,x,y+size);Line rightVert = new Line(x+size,y,x+size,y+size);Line horizontal = new Line(x,y+size/2.0,x+size,y+size/2.0);FRACTAL.addAll(leftVert,rightVert,horizontal);}private void drawHTree(int order,double x,double y,double size) {drawH(x, y, size);if(order > 0) {drawHTree(order-1, x-size/4, y-size/4, size/2);drawHTree(order-1, x+size-size/4, y-size/4, size/2);drawHTree(order-1, x-size/4, y+size-size/4, size/2);drawHTree(order-1, x+size-size/4, y+size-size/4, size/2);}}}
  •  代码解释

  1. 初始化界面和变量
    • 创建一个Application类的子类编程练习题18_35HTreeFractal,用于JavaFX应用程序。
    • 初始化窗口大小(WIDTHHEIGHT),并创建一个文本字段tfOrder用于输入分形的阶数(即递归深度)。
    • 创建一个PanedrawPane)作为画布,用于绘制H树分形。
  2. 构建用户界面
    • 使用BorderPane布局,将drawPane置于中心,用于显示分形图。
    • 在底部添加一个包含标签和文本字段的HBox,允许用户输入分形的阶数。
    • 设置文本字段的按键监听器,以便在输入变化时更新分形图。
  3. 绘制H树分形
    • 定义drawH方法,该方法接收x、y坐标和大小作为参数,绘制一个"H"形状(由两条垂直线和一条水平线组成)。
    • 定义drawHTree方法,这是一个递归方法,根据阶数(order)、中心坐标(xy)和大小(size)绘制H树。如果阶数大于0,则在每个"H"的四个末端递归地绘制更小的"H"。
  4. 响应文本字段的输入
    • 在文本字段的按键监听器中,检查用户是否输入了非空且有效的整数值。
    • 如果是,则清除当前画布上的所有内容,并根据新的阶数重新绘制H树分形。
  5. 设置画布属性
    • 尝试设置drawPanecenterShape属性(注意:Pane类没有centerShape方法,这可能是个错误或误解。正确的做法可能是通过布局管理来调整子节点的位置)。
    • 设置drawPane的首选高度和宽度,但注意这里对setPrefHeight的调用被重复了,并且第二次调用使用了错误的参数(应该是HEIGHT而非WIDTH)。
  • 输出结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148751.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

若依vue3.0表格的增删改查文件封装

一、因若依生成的文件没进行封装&#xff0c;维护起来比较麻烦。所以自己简单的进行封装了一下 gitee代码&#xff08;文件&#xff09;地址&#xff1a;https://gitee.com/liu_yu_ting09/ruo_yi.git 二、封装的方法&#xff08;下面绿色按钮进行全局封装一个JeecgListMixin.js…

如何在局域网下测试vue项目

同一局域网下&#xff0c;通俗讲&#xff0c;就是电脑和手机等其他设备连接的是同一个 wifi 1 修改 vue 项目的 host 地址 vue项目一般使用 npm run dev 或者 npm run server 来运行如果是 webpack 构建的项目&#xff0c;在config文件夹下有一个index.js文件&#xff0c;找到…

汽车HMI:UI设计进入了3D时代,设计师准备好了吗?

汽车HMI中的低模是通过使用简化的图形和界面元素来实现的。这些低模通常是通过减少细节和精细度来实现的&#xff0c;以便在有限的处理能力和内存资源下实现更流畅的用户体验。 对UI设计师来说&#xff0c;低模的实现可能会带来一些挑战。 首先&#xff0c;他们需要考虑如何在…

基于51单片机的模拟8层电梯运行proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1i_h6TnziwnPKKo37zlwWAg 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

建立分支提交代码

git分支 git branch 产看当前分支 git branch -a 查看所有分支 git checkout 分支名 切换分支 git checkout -b 分支名 建立分支&#xff08;仅仅是在本地建立了&#xff0c;并没有关联线上&#xff09; git push --set-upstream origin 分支名 把本地分支推到先线上 建立分支…

SQL进阶技巧:如何利用if语句简化where或join中的条件 | if条件语句的优雅使用方法

目录 0 问题场景 1 数据准备 2 问题分析 2.1 需求一 2.2需求二 3 小结 想要进一步了解SQL这门艺术语言的&#xff0c;可以订阅我的专栏数字化建设通关指南&#xff0c;将在该专栏进行详细解析。 专栏 原价99&#xff0c;现在活动价39.9&#xff0c;按照阶梯式增长&…

SQL语法学习与实战应用

第一章 引言 1.1 MySQL数据库概述 MySQL&#xff0c;作为一种广泛使用的关系型数据库管理系统&#xff0c;自其问世以来&#xff0c;便凭借开源、高性能及低成本等显著特点&#xff0c;迅速占据了广泛的市场份额。这一系统不仅支持大规模并发访问&#xff0c;更提供了多样化的…

项目实战:Ingress搭建Nginx+WP论坛+MariaDB

1. 网站架构 本次部署形式完全舍弃 Docker&#xff0c;将所有应用都置于Kubernetes&#xff0c;采用 Deployment 而非单 Pod 部署&#xff0c;稳定性得到升级。 2. 部署 MariaDB [rootk8s-master ~]# mkdir tdr [rootk8s-master ~]# cd tdr/ &#xff08;1&#xff09;定义 …

【JavaEE】——线程“饿死问题” wait notify

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 引子&#xff1a; 一&#xff1a;情景引入 二&#xff1a;线程饿死问题 1&#xff1a;线程饿死 2&a…

lvgl学习笔记--基础对象1

【LVGL学习笔记】&#xff08;三&#xff09;控件使用_学习_煜个头头-GitCode 开源社区 LVGL 基础对象|极客笔记 #include "../../../lv_examples.h"void lv_ex_obj_1(void) {lv_obj_t * obj1;obj1 lv_obj_create(lv_scr_act(), NULL);lv_obj_set_size(obj1, 100, …

MySql语言操作数据库---增删改查数据库,表,数据

思维导图 SQL语言共分为四大类&#xff1a; 数据定义语言DDL:数据定义语言DDL用来创建数据库中的各种对象-----[库]、[表]、[视图]、[索引]、 数据操纵语言DML:(1) 插入&#xff1a;INSERT (2) 更新&#xff1a;UPDATE (3) 删除&#xff1a;DELETE 数据查询语言DQL:数据查询语…

Docker 付费订阅价格大幅上调,免费订阅功能受限,云计算和安全产品有调整

云计算de小白 同时&#xff0c;免费的 Docker Personal 订阅将不再包含 Build Cloud 分钟数&#xff0c;支持范围将从三个 Scout 存储库变为仅一个&#xff0c;并且仅限于一个具有 2 GB 存储空间的私有 Docker Hub 容器注册存储库。 不过&#xff0c;Docker也对云计算和安全产…

清华大学开源视频转文本模型——CogVLM2-Llama3-Caption

通常情况下&#xff0c;大多数视频数据并不附带相应的描述性文本&#xff0c;因此有必要将视频数据转换为文本描述&#xff0c;为文本到视频模型提供必要的训练数据。 CogVLM2-Caption 是一个视频字幕模型&#xff0c;用于为 CogVideoX 模型生成训练数据。 文件 使用 import i…

C语言编程中的小数(double,float)

最近看电路基础&#xff0c;第一个知识就是欧姆定律。 一、欧姆本人介绍 欧姆&#xff08;Georg Simon Ohm&#xff09;‌&#xff0c;1789年3月16日出生于德国巴伐利亚州的‌埃尔朗根&#xff0c;是一位杰出的物理学家和数学家。他最为人知的是在‌电学领域的贡献&#xff0…

动态倒计时在 Vue 3 中的实现

目录 1. Demo2. 实战Demo3. 拓展Demo 1. Demo 给一版初始的Demo&#xff0c;在给一版实战中的Demo 基本知识点&#xff1a; Vue 3 的响应式原理&#xff1a;Vue 3 使用 reactive 和 ref 创建响应式数据&#xff0c;数据的变化会自动触发视图更新setup 函数&#xff1a;Vue 3…

​智慧铜矿厂综合管控平台,智慧矿山数字孪生

随着矿山行业的不断发展&#xff0c;传统的管理方式已经无法满足现代铜矿高效、安全、环保和精细化管理的需求&#xff0c;因此&#xff0c;构建一个综合管控平台变得尤为必要。HT 铜矿综合管控平台应运而生&#xff0c;通过信息化和智能化手段&#xff0c;整合采矿、选矿、冶炼…

【包教包会】CocosCreator3.x框架——音频模块(无需导入、无需常驻节点)

下载地址&#xff1a;AudioDemo3.x: CocosCreator3.x框架——音频模块 注意事项&#xff1a; 1、gi.musicPlay、gi.soundPlay是同步函数&#xff0c;使用前必须先将音频加载到缓存 Demo通过SceneLoading实现了一个极简的Loading页面&#xff0c;将音频全部加载后进入游戏&…

Vue学习文档

文章目录 一、Vue 简介1、官网2、作者和版本3、定义4、特点5、Vue 的周边库二、Vue 安装使用1、CDN 引入2、下载后引入3、命令行工具 (CLI)三、入门案例四、MVVM模型1、MVVM 模型2、Vue 与 MVVM 模型五、Vue 基本使用1、文本插值(掌握)-text2、属性插值(掌握 )-bind3、Clas…

【Python】Spyder:科学 Python 开发环境

在数据科学和科学计算领域&#xff0c;Python 已经成为了一个不可或缺的工具。为了提高开发效率和改善编程体验&#xff0c;一个功能强大且用户友好的开发环境是必需的。Spyder&#xff08;Scientific Python Development Environment&#xff09;正是这样一个为科学计算和数据…

数据结构-线性表的单链式存储结构图解及C语言实现

概念 链式存储&#xff1a;结点在存储器中的位置是任意的&#xff0c;即逻辑相邻的数据元素在物理上不一定相邻 链式存储结构也称非顺序映像或链式映像 图解 链式存储结构中结点一般有两个部分组成&#xff0c;即数据域(data)和指针域&#xff0c;数据域是用于存放数据的&…