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

news2024/9/23 15:37:51

目录

题目:**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);
	}
	@Override
	public 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.coloradmin.cn/o/2157887.html

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

相关文章

归并算法实现

1.归并算法图解 2.归并算法代码 package com.suanfa.sort;import java.util.Arrays;/*** 归并算法*/ public class MergeSort {/*** 拆的时间复杂度logn * 并的时间复杂度n nlogn** param arr* param left* param right*/public static void sortMerge(int[] arr, int left, …

第十一章 从0-1搭建一个简单的JavaWeb系统(三)

目录 一、工程代码结构 二、代码实现 三、运行效果 四、未完待续 本章节的每一段代码&#xff0c;建议全部自己敲一遍&#xff0c;加深印象&#xff0c;切勿直接复制黏贴。 一、工程代码结构 本章节实现注销&#xff08;退出&#xff09;功能&#xff0c;以下图片中标红的…

19个邮件群发小技巧,最大水平充分利用邮件营销

邮件群发在现代通信中占据着非常重要的位置。无论是在商业环境还是个人生活中&#xff0c;它都有着广泛的应用。无论您是公司的市场推广专家&#xff0c;还是社交团体的筹办者&#xff0c;掌握有效的邮件群发技巧会帮助您更好地传递信息、节约时间和提升工作效率。 确定目标受众…

【Ubuntu】Ubuntu安装编译C/C++环境简易版教程

环境 操作系统&#xff1a;ubuntu-22.04.4-desktop-amd64.iso 安装 第一步:更新软件包列表&#xff0c;检查可用的软件包更新 sudo apt update在这一步&#xff0c;我们可以确保系统中的软件包列表是最新的&#xff0c;以便后续的软件包管理操作。 第二步&#xff1a;安装…

craco-less使用问题

craco-less使用问题 问题背景 前端是用React搭建&#xff0c;使用craco配置&#xff0c;相关库或插件版本如下 "craco/craco": "^7.1.0","react-scripts": "^5.0.1","craco-less": "^3.0.1"在生产环境&#xff…

JAVA开源项目 甘肃非物质文化网站 计算机毕业设计

本文项目编号 T 043 &#xff0c;文末自助获取源码 \color{red}{T043&#xff0c;文末自助获取源码} T043&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

【无人机设计与控制】基于蜣螂优化算法求解多无人机集群路径规划问题

摘要 本文基于蜣螂优化算法&#xff08;Dung Beetle Optimization, DBO&#xff09;研究了多无人机路径规划问题。目标是优化多无人机的飞行轨迹&#xff0c;在避免障碍物的同时&#xff0c;尽量减少能量消耗并保持集群内的通信。为提高搜索效率和准确性&#xff0c;对DBO进行…

AJAX 入门 day3 XMLHttpRequest、Promise对象、自己封装简单版的axios

目录 1.XMLHttpRequest 1.1 XMLHttpRequest认识 1.2 用ajax发送请求 1.3 案例 1.4 XMLHttpRequest - 查询参数 1.5 XMLHttpRequest - 数据提交 2.Promise 2.1 Promise认识 2.2 Promise - 三种状态 2.3 案例 3.封装简易版 axios 3.1 封装_简易axios_获取省份列表 3…

Spring Boot 中实现任务后台处理的几种常见方式

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 在现代应用程序中&#xff0c;后台处理对于处理发送电子邮件、处理文件、生成报告等任务至关重要。 Spring Boot 提供了多种机制来高效地实现后台任务。本文探讨了在 Spring Boot 中处理后台处理的各…

STM32调试TIC12400笔记

工作中需要用到&#xff0c;但是有关这个芯片的参考资料好少&#xff0c;自己写一下调试过程&#xff0c;持续更新中&#xff0c;还没调完。 用的是正点原子的mini板&#xff0c;芯片是stm32f103RCT&#xff0c;需要知道spi的相关知识&#xff0c;先配置spi&#xff0c;用cube…

Ubuntu初期配置常见问题汇总

ubuntu配置vim 代码配色 终端配置 ubuntu配置vim 代码配色 终端配置_ubuntu的vim配置-CSDN博客https://blog.csdn.net/GM2418/article/details/134195020小缺点是无法自动补齐 ubuntu中vim实现代码补全等功能_ubuntu vim 自动补全-CSDN博客https://blog.csdn.net/weixin_4580…

图纸加密软件有哪些?2024好用不踩雷的10款图纸加密软件推荐!

在当今数字化时代&#xff0c;图纸作为工程设计、建筑规划等领域的重要文件&#xff0c;其安全性至关重要。为了保护这些敏感信息不被泄露&#xff0c;图纸加密软件应运而生。本文将为您推荐2024年10款好用且不踩雷的图纸加密软件&#xff0c;帮助您选择最适合的工具来保护您的…

【machine learning-十-grading descent梯度下降实现】

grading descent 梯度下降参数更新方法 --导数和学习率 从导数项直观理解梯度下降 grading descent 算法就是更新参数&#xff0c;今天来学习下如何更新w和b 梯度下降 还是以线性回归的均方差损失函数如下为例&#xff1a; 损失函数的可视化图如下 &#xff1a; 横轴和纵轴分…

平价头戴式蓝牙耳机哪个牌子好?四大平价爆款头戴式耳机品牌推荐

在追求高品质音乐生活的同时&#xff0c;我们往往被高昂的价格所困扰&#xff0c;然而随着科技的进步和市场竞争的加剧&#xff0c;越来越多的平价头戴式蓝牙耳机品牌开始崭露头角&#xff0c;它们以出色的音质、舒适的佩戴体验和亲民的价格赢得了广大消费者的喜爱&#xff0c;…

数据结构之线性表(python)

华子目录 线性表的定义前驱与后继 1.顺序表&#xff08;顺序存储结构&#xff09;python列表与数组的区别列表数组 1.1插入数据实例 1.2删除元素实例 1.3查找元素1.4修改元素1.5综合示例 2.单链表2.1单链表的初始化2.2插入元素示例注意 2.3删除元素示例 2.4修改元素2.5查找元素…

【网络】TCP协议的简单使用

目录 echo_service server 单进程单线程 多进程 多线程 线程池 client echo_service_code echo_service 还是跟之前UDP一样&#xff0c;我们先通过实际的代码来实现一些小功能&#xff0c;简单的来使用TCP协议进行简单的通信&#xff0c;话不多说&#xff0c;我们先实现…

LabVIEW提高开发效率技巧----合理使用数据流与内存管理

理使用数据流和内存管理是LabVIEW开发中提高性能和稳定性的关键&#xff0c;特别是在处理大数据或高频率信号时&#xff0c;优化可以避免内存消耗过大、程序卡顿甚至崩溃。 1. 使用 Shift Register 进行内存管理 Shift Register&#xff08;移位寄存器&#xff09; 是 LabVIE…

五分钟上手Spring AI Alibaba,轻松打造智能聊天应用

文章目录 快速上手快速体验示例示例开发指南总结 快速上手 Spring AI Alibaba 已经完全适配了阿里云通用模型&#xff0c;接下来&#xff0c;我们将学习如何使用 spring ai alibaba 开发一个基于通用模型服务的智能聊天应用。 快速体验示例 下载项目 运行以下命令下载源码&…

【产品更新】中汇保函-电子保函管理平台

中汇保函 新增 1.手机扫描保函验真二维码直接跳转小程序模块&#xff0c;验真快人一步。 2.新增客户服务服务&#xff0c;可直接联系微信客服。 优化 1.提交申请、登录程序响应速度。 更新内容说明 1.手机扫描保函验真二维码直接跳转小程序模块&#xff0c;验真快人一步。 2.…

从零开始之AI面试小程序

从零开始之AI面试小程序 文章目录 从零开始之AI面试小程序前言一、工具列表二、部署流程1. VMWare安装2. Centos安装3. Centos环境配置3.1. 更改子网IP3.2. 配置静态IP地址 4. Docker和Docker Compose安装5. Docker镜像加速源配置6. 部署中间件6.1. MySQL部署6.2. Redis部署 7.…