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端口 设置自定义端口

某某物联rabbitmqhttp二轮充电桩协议充电协议对接

对接方式概述: 1)请求采用 http 协议方式,推送数据采用 amqp(默认 rabbitmq)点对点消息队 列方式。 2)消息队列连接信息,需贵方完善。 1 hostIp: 2 virtualHost: 3 userName: 4 pass…

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…

vue3中Composition API写法 <script setup>标签中哪些可以不用导入即可使用?

在 Vue 3 中使用 <script setup> 时&#xff0c;确实有一些全局的 API 和宏可以直接使用&#xff0c;而不需要显式地从 vue 包中导入它们。这是因为 <script setup> 是专门为了提供更简洁的组件编写方式而设计的&#xff0c;它内部利用了编译时的语法糖。 以下是在…

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

【事半功倍】视频素材播放之不二法门——倍速之法&#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…

gitlab更新了ssh-key之后再登录还是要求输入密码, 报 Permission denied, please try again.

gitlab更新了ssh-key之后再登录还是要求输入密码 在gitlab更新了ssh-key&#xff0c;并且把pub更新到了gitlab 的ssh-key去了&#xff0c; 但是每一次连接的时候还是要求输入password, 问题是我已经输入了gitlab账号的密码还是报错。。。 晕 一直报&#xff1a;debug1: Authe…

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

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;大家可以参考。 ​…

webpack配置报错:Invalid options object.

前言&#xff1a; 今天在使用webpack进行项目配置的时候&#xff0c;运行之后终端报错&#xff1a;Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options has an unknown property inline. Thes…

vscode插件开发笔记——大模型应用之AI编程助手

系列文章目录 文章目录 系列文章目录前言一、代码补全 前言 最近在开发vscode插件相关的项目&#xff0c;网上很少有关于大模型作为AI 编程助手这方面的教程。因此&#xff0c;借此机会把最近写的几个demo分享记录一下。 一、代码补全 思路&#xff1a; 读取vscode插件上鼠…

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

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

vue 实现对图片的某个区域点选, 并在该区域上方显示该部分内容

目录 1、通义灵码实现&#xff1a; 2、csdn的C知道&#xff1a; 3、百度comate&#xff1a; 1、通义灵码实现&#xff1a; 在 Vue 中实现对图片某个区域的点选并显示该区域属于哪一部分&#xff0c;通常涉及到几个关键步骤&#xff1a; 图片区域划分&#xff1a; 首先&#…

unity文字||图片模糊

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