Java语言程序设计基础篇_编程练习题*15.21(拖动点)

*15.21(拖动点)

绘制一个圆,在圆上有三个随机点。连接这些点构成一个三角形。显示三角形中的角度。使用鼠标沿着圆的边拖动点。拖动的时候,三角形以及角度动态地重新显示,如图15-30b 所示。计算三角形角度的公式参考程序清单4-1

可以参考上一题:Java语言程序设计基础篇_编程练习题**15.20 (几何问題:显示角度)-CSDN博客 

  • 习题思路
  1.  新建一个大圆,生成三个随机角度,在大圆上对应角度创建三个小圆,同时创建三个文本和三条线
  2. 将文本和直线的位置分别绑定在三个圆上
  3. 为三个小圆注册鼠标事件,为避免重复书写代码,可以建一个方法来注册
  4. (注册事件内部)计算鼠标相对于大圆中心的角度,然后再计算出xy的坐标,设置到小圆上,同时更新文本内容
  5. 新建其他几个方法分别计算角度与距离(与上一题一样,书上已给出公式)

代码示例:编程练习题15_21MovePoint.java

package chapter_15;import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.text.Text;
import javafx.stage.Stage;public class 编程练习题15_21MovePoint extends Application{Circle bigCircle = new Circle(150, 150, 100);Text t1 = new Text("c1");Text t2 = new Text("c2");Text t3 = new Text("c3");double randomAngle1 = Math.random()*2*Math.PI;double randomAngle2 = Math.random()*2*Math.PI;double randomAngle3 = Math.random()*2*Math.PI;double x1 = bigCircle.getCenterX() + bigCircle.getRadius()*Math.cos(randomAngle1);double y1 = bigCircle.getCenterY() + bigCircle.getRadius()*Math.sin(randomAngle1);double x2 = bigCircle.getCenterX() + bigCircle.getRadius()*Math.cos(randomAngle2);double y2 = bigCircle.getCenterY() + bigCircle.getRadius()*Math.sin(randomAngle2);double x3 = bigCircle.getCenterX() + bigCircle.getRadius()*Math.cos(randomAngle3);double y3 = bigCircle.getCenterY() + bigCircle.getRadius()*Math.sin(randomAngle3);Circle c1 = new Circle(x1, y1, 10);Circle c2 = new Circle(x2, y2, 10);Circle c3 = new Circle(x3, y3, 10);@Overridepublic void start(Stage primaryStage) throws Exception {Pane pane = new Pane();bigCircle.setFill(Color.WHITE);bigCircle.setStroke(Color.BLACK);pane.getChildren().add(bigCircle);c1.setFill(Color.TRANSPARENT);c2.setFill(Color.TRANSPARENT);c3.setFill(Color.TRANSPARENT);c1.setStroke(Color.BLACK);c2.setStroke(Color.BLACK);c3.setStroke(Color.BLACK);pane.getChildren().addAll(c1, c2, c3);bindTextToCircle(t1, c1);bindTextToCircle(t2, c2);bindTextToCircle(t3, c3);Line l1 = new Line(x1, y1, x2, y2);Line l2 = new Line(x1, y1, x3, y3);Line l3 = new Line(x2, y2, x3, y3);l1.startXProperty().bind(c1.centerXProperty());l1.startYProperty().bind(c1.centerYProperty());l2.startXProperty().bind(c1.centerXProperty());l2.startYProperty().bind(c1.centerYProperty());l3.startXProperty().bind(c2.centerXProperty());l3.startYProperty().bind(c2.centerYProperty());l1.endXProperty().bind(c2.centerXProperty());l1.endYProperty().bind(c2.centerYProperty());l2.endXProperty().bind(c3.centerXProperty());l2.endYProperty().bind(c3.centerYProperty());l3.endXProperty().bind(c3.centerXProperty());l3.endYProperty().bind(c3.centerYProperty());bindDragEvent(c1);bindDragEvent(c2);bindDragEvent(c3);updateAngleText();pane.getChildren().addAll(l1, l2, l3,t1,t2,t3);Scene scene = new Scene(pane, 300, 300);primaryStage.setTitle("编程练习题15_21MovePoint");primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args) {Application.launch(args);}private void bindDragEvent(Circle c) {c.setOnMouseDragged(e -> {double mouseX = e.getX();double mouseY = e.getY();double deltaX = mouseX - bigCircle.getCenterX();double deltaY = mouseY - bigCircle.getCenterY();double angle = Math.atan2(deltaY, deltaX);double x = bigCircle.getCenterX() + bigCircle.getRadius()*Math.cos(angle);double y = bigCircle.getCenterY() + bigCircle.getRadius()*Math.sin(angle);c.setCenterX(x);c.setCenterY(y);updateAngleText();});}private void updateAngleText() {t1.setText("c1: " + calculateAngle(c1, c2, c3));t2.setText("c2: " + calculateAngle(c2, c1, c3));t3.setText("c3: " + calculateAngle(c3, c1, c2));}private void bindTextToCircle(Text text, Circle circle) {text.xProperty().bind(circle.centerXProperty());text.yProperty().bind(circle.centerYProperty().subtract(5));}private double calculateAngle(Circle referenceCircle, Circle circle1, Circle circle2) {double a = distance(referenceCircle, circle1);double b = distance(referenceCircle, circle2);double c = distance(circle1, circle2);double angle = Math.toDegrees(Math.acos((a * a + b * b - c * c) / (2 * a * b)));return Math.round(angle * 100.0) / 100.0;}private double distance(Circle c1, Circle c2) {return Math.sqrt(Math.pow(c2.getCenterX() - c1.getCenterX(), 2) + Math.pow(c2.getCenterY() - c1.getCenterY(), 2));}
}
  •  结果展示

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

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

相关文章

SD换脸reactor

目前安装最复杂的插件 ReActor, 安装吐了,幸亏自己是屌丝程序员,插件是通过python写的,通过给源代码输出一些信息,最终定位问题,安装成功了。看看他的换脸效果. 图生图 重绘幅度为0 reactor 设置五官图像…

【Django】在vscode中运行调试Django项目(命令及图形方式)

文章目录 命令方式图形方式默认8000端口设置自定义端口 命令方式 python manage.py runserver图形方式 默认8000端口 设置自定义端口

vue3+vite 实现动态引入某个文件夹下的组件 - glob-import的使用

<template><div class"user-content"><HeaderTitle title"用户详情"></HeaderTitle><div class"main-content"><div><UserForm /></div><div><TableList></TableList></d…

基于Python的帕金森病人步态分析

目录 摘要一、引言1.背景知识2.实验目的和意义 二、实验方法1.实验环境2.实验步骤2.1 生成信号&#xff0c;进行手动傅里叶变换以及内置 FFT 函数傅里叶变换2.2 进行手动傅里叶变换以及内置 FFT 函数傅里叶变换2.3 基于傅里叶变换的步态信息分析2.4 基于傅里叶变换的卷积分析 3…

【事半功倍】视频素材播放之不二法门——倍速之法,无级变速

【事半功倍】视频素材播放之不二法门——倍速之法&#xff0c;无级变速 一、一般の三种方式1.1 原生H5 video1.2 Video.js1.3 动态切换播放速度 二、最佳设置三、效果 一、一般の三种方式 1.1 原生H5 video 对于原生HTML5 video 元素&#xff0c;你可以直接使用 playbackRate…

【算法刷题】【力扣】| 最长回文子串|

给你一个字符串 s&#xff0c;找到 s 中最长的 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。示例 2&#xff1a; 输入&#xff1a;s "cbbd" 输出&#x…

智慧学院智能化项目规划设计方案

1. 项目概况 智慧学院智能化项目规划旨在打造集人才培养、科学研究、技术创新等于一体的高端研究生院。项目占地面积广阔&#xff0c;包含教学、科研、学生宿舍、教师宿舍、公共服务和公共配套等多个功能区域。 2. 建设思想 建设思想强调投资合理、统一规划、立足现状、适度…

使用Python 机器学习-5-Python Mini Project–使用深度学习进行乳腺癌分类

一、前言 该文章仅作为个人学习使用 二、正文 项目源代码&#xff1a;Python 项目 - 使用深度学习进行乳腺癌分类 - DataFlair (data-flair.training) 数据集&#xff1a;乳腺组织病理学图像 |卡格尔 (kaggle.com) Python 中的乳腺癌分类项目 了解 Python 中乳腺癌分类项目中使…

【数据结构】二叉树——顺序结构——堆及其实现

一、树 1.1、树的概念和结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点组成的一个具有层次关系的集合。 树有一个特殊的节点&#xff0c;称为根节点&#xff0c;根节点没有前驱结点。 除根节点外&#xff0c;其余部分被分为M&…

海康视频WEB插件

引入相关依赖 index.html <script src"/video/web-control_1.2.5.min.js"></script> <script src"/video/jquery-1.12.4.min.js" type"text/javascript"></script> <script src"/video/jsencrypt.min.js" …

[UE 虚幻引擎] DTHmacSha 蓝图HMACSHA加密算法插件说明

本插件可以在虚幻引擎中使用蓝图对字符串和文件进行HMACSHA加密。 1.节点说明 HMACSHA一共有5种加密方式&#xff0c;分辨是 HMAC SHA-1&#xff0c; HMAC SHA-224&#xff0c;HMAC SHA-256&#xff0c;HMAC SHA-384&#xff0c;HMAC SHA-512。 本插件对每种加密方式提供3个节点…

快自查一下,你的手机有没有被乱扣费吧!查询方法都告诉你了!

不知道你有没有这种困扰&#xff0c;明明办的是29元的套餐&#xff0c;但是每月扣费的时候总是莫名其妙的被多收&#xff0c;如果你也有这种情况&#xff0c;那么有可能是被乱扣费了&#xff0c;下面这篇文章教你如何自查是否被乱扣费以及解决方法&#xff0c;大家可以参考。 ​…

npm上传自己的包以及发布过程遇到的问题

大家好&#xff0c;我是前端追寻路上的【酱酱仔】 作为在前端领域不断探索的一员&#xff0c;在此记录开发中遇到的问题&#xff0c;如果你也遇到了相同的问题&#xff0c;希望本文对你有帮助。 前提&#xff1a;本文涉及的命令都是在要发布的包的根目录下执行的&#xff0c;在…

unity文字||图片模糊

一.文字模糊 1、增大字体大小后等比缩放 快捷键R 2、更改字体渲染模式 二.图片模糊 1、更改过滤模式 2、更改格式或者压缩 3、如果只是图片边缘看不清&#xff0c;可以增加canvas/图片的每单位参考像素

nginx漏洞修复 ngx_http_mp4_module漏洞(CVE-2022-41742)【低可信】 nginx版本升级

风险描述&#xff1a; Nginx 是一款轻量级的Web服务器、反向代理服务器。 Nginx 的受影响版本中的ngx _http_mp4_module模块存在内存越界写入漏洞&#xff0c;当在配置中使用 mp4 directive时&#xff0c;攻击者可利用此漏洞使用使用ngx_http_mp4_module模块处理特制的音频或视…

WARNING: The Nouveau kernel driver is currently in use by your system. 处理方法

实践系统&#xff1a; 安装NVIDIA驱动时&#xff0c;提示&#xff1a; WARNING: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver&#xff0c;and must be disabled before proceeding.警告&#xff1…

Meta发布Llama 3.1开源大语言模型;谷歌发布NeuralGCM AI天气预测模型

&#x1f989; AI新闻 &#x1f680; Meta发布Llama 3.1开源大语言模型 摘要&#xff1a;Meta正式发布了开源大语言模型Llama 3.1&#xff0c;包括8B、70B和405B参数版本。Llama 3.1在推理能力和多语言支持方面有所改进&#xff0c;上下文长度提升至128K&#xff0c;405B参数…

node和npm安装;electron、 electron-builder安装

1、node和npm安装 参考&#xff1a; https://blog.csdn.net/sw150811426/article/details/137147783 下载&#xff1a; https://nodejs.org/dist/v20.15.1/ 安装&#xff1a; 点击下载msi直接运行安装 安装完直接cmd打开可以&#xff0c;默认安装就已经添加了环境变量&…

科技引领水资源管理新篇章:深入剖析智慧水利解决方案,展现其在提升水资源利用效率、优化水环境管理方面的创新实践

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

JavaDS —— 排序

排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&a…