JavaFX官方教程(十)之转换类型和示例

翻译自  Transformation Types and Examples

本文档描述了特定的转换并提供了代码示例。

转换

平移变换沿着相对于其初始位置的一个轴将节点从一个位置移动到另一个位置。木琴条的初始位置由x,y和z坐标定义。在实施例2-1中,初始位置值由指定的xStartyPoszPos变量。添加一些其他变量以简化应用不同变换时的计算。木琴的每个杆都基于其中一个基杆。然后,该示例沿三个轴平移不同移位的基条,以在空间中正确定位它们。

示例2-1显示了具有转换转换的示例应用程序的代码片段。

例2-1转换

Group rectangleGroup = new Group();rectangleGroup.setDepthTest(DepthTest.ENABLE);double xStart = 260.0;double xOffset = 30.0;double yPos = 300.0;double zPos = 0.0;double barWidth = 22.0;double barDepth = 7.0;// Base1Cube base1Cube = new Cube(1.0, new Color(0.2, 0.12, 0.1, 1.0), 1.0);base1Cube.setTranslateX(xStart + 135);base1Cube.setTranslateZ(yPos+20.0);base1Cube.setTranslateY(11.0);

回转

旋转变换使节点围绕场景的指定枢轴点移动。您可以使用类的rotate方法Transform来执行旋转。

要在示例应用程序中围绕木琴旋转相机,使用旋转变换,但从技术上讲,当鼠标旋转相机时,木琴本身就会移动。

例2-2显示了旋转变换的代码。

例2-2旋转

class Cam extends Group {Translate t  = new Translate();Translate p  = new Translate();Translate ip = new Translate();Rotate rx = new Rotate();{ rx.setAxis(Rotate.X_AXIS); }Rotate ry = new Rotate();{ ry.setAxis(Rotate.Y_AXIS); }Rotate rz = new Rotate();{ rz.setAxis(Rotate.Z_AXIS); }Scale s = new Scale();public Cam() { super(); getTransforms().addAll(t, p, rx, rz, ry, s, ip); }}
...scene.setOnMouseDragged(new EventHandler<MouseEvent>() {public void handle(MouseEvent me) {mouseOldX = mousePosX;mouseOldY = mousePosY;mousePosX = me.getX();mousePosY = me.getY();mouseDeltaX = mousePosX - mouseOldX;mouseDeltaY = mousePosY - mouseOldY;if (me.isAltDown() && me.isShiftDown() && me.isPrimaryButtonDown()) {cam.rz.setAngle(cam.rz.getAngle() - mouseDeltaX);}else if (me.isAltDown() && me.isPrimaryButtonDown()) {cam.ry.setAngle(cam.ry.getAngle() - mouseDeltaX);cam.rx.setAngle(cam.rx.getAngle() + mouseDeltaY);}else if (me.isAltDown() && me.isSecondaryButtonDown()) {double scale = cam.s.getX();double newScale = scale + mouseDeltaX*0.01;cam.s.setX(newScale); cam.s.setY(newScale); cam.s.setZ(newScale);}else if (me.isAltDown() && me.isMiddleButtonDown()) {cam.t.setX(cam.t.getX() + mouseDeltaX);cam.t.setY(cam.t.getY() + mouseDeltaY);}}});

请注意,轴心点和角度定义了图像移动到的目标点。指定轴心点时要仔细计算值。否则,图像可能会出现在不希望出现的位置。有关更多信息,请参阅API文档。

缩放

缩放变换使节点看起来更大或更小,具体取决于缩放因子。缩放会更改节点,以便沿其轴的尺寸乘以比例因子。与旋转变换类似,缩放变换应用于枢轴点。该枢轴点被认为是围绕其发生缩放的点。

要缩放,请使用Scale类的类和scale方法Transform

在Xylophone应用程序中,您可以在按Alt和鼠标右键的同时使用鼠标缩放木琴。比例变换用于查看缩放。

例2-3显示了比例转换的代码。

例2-3缩放

else if (me.isAltDown() && me.isSecondaryButtonDown()) {double scale = cam.s.getX();double newScale = scale + mouseDeltaX*0.01;cam.s.setX(newScale); cam.s.setY(newScale); cam.s.setZ(newScale);}
...

剪毛

剪切变换使一个轴旋转,使得x轴和y轴不再垂直。节点的坐标移动指定的乘数。

要剪切,请使用Shear类的类或shear方法Transform

在Xylophone应用程序中,您可以通过拖动鼠标来剪切木琴,同时按住Shift并按下鼠标左键。

图2-1剪切变换

例2-4显示了剪切变换的代码片段。

实施例2-4剪切

else if (me.isShiftDown() && me.isPrimaryButtonDown()) {double yShear = shear.getY();shear.setY(yShear + mouseDeltaY/1000.0);double xShear = shear.getX();shear.setX(xShear + mouseDeltaX/1000.0);
}

多重转换

您可以通过指定有序的转换链来构造多个转换。例如,您可以缩放对象然后对其应用剪切变换,或者您可以翻译对象然后缩放它。

示例2-5显示了应用于对象以创建木琴栏的多个转换。

例2-5多次转换

Cube base1Cube = new Cube(1.0, new Color(0.2, 0.12, 0.1, 1.0), 1.0);base1Cube.setTranslateX(xStart + 135);base1Cube.setTranslateZ(yPos+20.0);base1Cube.setTranslateY(11.0);base1Cube.setScaleX(barWidth*11.5);base1Cube.setScaleZ(10.0);base1Cube.setScaleY(barDepth*2.0);

应用文件

源代码 

  • Xylophone.java

NetBeans项目 

  • transformations.zip

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

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

相关文章

Web前端知识体系精简

Web前端技术由html、css和javascript三大部分构成&#xff0c;是一个庞大而复杂的技术体系&#xff0c;其复杂程度不低于任何一门后端语言。而我们在学习它的时候往往是先从某一个点切入&#xff0c;然后不断地接触和学习新的知识点&#xff0c;因此对于初学者很难理清楚整个体…

JavaFX官方教程(十一)之动画基础

翻译自 动画基础 动画基础提供基本动画概念&#xff0c;包含以下部分&#xff1a; 转变 时间线动画 插值 JavaFX中的动画可以分为时间轴动画和过渡。本章提供了每种动画类型的示例。 Timeline并且Transition是javafx.animation.Animation该类的子类。有关特定类&#xff…

内存VS硬盘

一个程序和它的数据在被CPU执行前必须移到计算机的内存 中。 原因 内存存取数据的速度比硬盘的存取速度快10倍&#xff0c;在某些环境里&#xff0c;硬盘和内存之间的速度差距可能会更大。而CPU的速度比内存不知还要快多少倍。当我们把程序从硬盘放到内存以后&#xff0c;CPU…

依赖注入之Autofac使用总结

依赖倒置&#xff1f;控制反转&#xff08;IOC&#xff09;? 依赖注入&#xff08;DI&#xff09;&#xff1f; 你是否还在被这些名词所困扰&#xff0c;是否看了大量理论文章后还是一知半解了&#xff1f; 今天我想结合实际项目&#xff0c;和正在迷惑中的新手朋友一起来学…

JavaFX官方教程(十二)之树动画示例

翻译自 树动画示例 本章提供有关树动画示例的详细信息。您将了解场景中的所有元素是如何创建和动画的。 图4-1显示了带树的场景。 图4-1树动画 项目和要素 树动画项目由几个文件组成。每个元素&#xff0c;如树叶&#xff0c;草叶等&#xff0c;都是在不同的类中创建的。在…

像素密度(衡量屏幕显示能力)

像素密度√[(长度像素数)^2(宽度像素数)^2]/屏幕尺寸 eg:

通过Roslyn构建自己的C#脚本(更新版)

之前写过文章介绍过如何通过Roslyn构建自己的C#脚本&#xff0c;但那篇文章是参考自Roslyn CTP版的&#xff0c;记得本来想等到Roslyn正式版出来重新更新一下文档的&#xff0c;不过记得后来Roslyn是跳票了的&#xff0c;Scripting API在正式版本中都一度被移除了&#xff0c;这…

JavaFX官方教程(十三)之应用效果

翻译自 Applying Effects 创建视觉效果包含以下主题&#xff1a; 混合效果 绽放效果 模糊效果 投影效果 内阴影效果 反射 照明效果 透视效果 创建一系列效果 介绍如何使用视觉效果来增强JavaFX应用程序的外观。 所有效果都位于javafx.scene.effect包中&#xff0c;…

java中遍历树形菜单,你可能不知道还有这样的方法

版权声明&#xff1a;本文为CSDN博主「穆雄雄」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链接及本声明。原文链接&#xff1a;https://blog.csdn.net/qq_34137397/article/details/72654955穆雄雄开发工具&#xff1a;MyEclipse 10.5后台…

Docker-Compose 一键部署Ningx+.Net Core+Redis集群

在看该文章前&#xff0c;你需要对Docker有所了解。 1、创建WebApp应用程序 我使用的是.Net Core 1.0.1版本&#xff0c;创建一个MVC应用程序&#xff0c;并添加对Redis的引用。因为这些很基础&#xff0c;也很简单&#xff0c;这里就不详细说明了&#xff0c;特别提一下有关多…

Catalog Service - 解析微软微服务架构eShopOnContainers(三)

上一篇我们说了Identity Service&#xff0c;因为其基于IdentityServer4开发的&#xff0c;所以知识点不是很多&#xff0c;今天我们来看下Catalog Service&#xff0c;今后的讲解都会把不同的、重点的拿出来讲&#xff0c;希望大家明白。 源码分析 我们先看下它的目录结构&a…

配置环境变量 path

原理 根据windows系统在查找可执行程序的原理&#xff0c;可以将java工具所在路径定义到path 环境变量中&#xff0c;让系统帮我们去找运行执行的程序。 配置方法 我的电脑–属性–高级系统设置–环境变量 编辑 path 环境变量&#xff0c;在变量值开始处加上java工具所在目录…

前端框架选型

前面的话 有一个流传较广的笑话&#xff0c;一个人在stackoverflow中提了一个问题&#xff0c;如何使用javascript实现一个数字与另外一个数字相加。最高票回答是你应该使用jQuery插件&#xff0c;jQuery插件可以做任何事情。 历史总是在重演&#xff0c;以前是jQuery&#xff…

断言、触发器、存储过程

断言 assertion 设置每一门课程最多有60人选修 create assertion a check (60 > all ( select count(*) from sc group by cno) ); drop assertion a; 触发器 trigger 删除触发器 drop tigger a on student 存储过程 定义一个没有返回值的存储过程 create procedure my…

一个java源文件中可以声明多少个class与编译后会生成多少个字节码文件

在一个java源文件中可以声明多个class。 但是&#xff0c;只能最多有一个类声明为public的。 而且要求声明为public的类的类名必须与源文件名相同。 编译的过程 编译以后&#xff0c;会生成一个或多个字节码文件。字节码文件的文件名与java源文件中的类名相同。 运行 只能运…

JavaFX UI控件教程(二)之JavaFX UI控件

翻译自 JavaFX UI控件 本章概述了通过API提供的JavaFX UI控件。 JavaFX UI控件是使用场景图中的节点构建的。因此&#xff0c;控件可以使用JavaFX平台的视觉丰富功能。由于JavaFX API完全用Java实现&#xff0c;因此您可以轻松地将JavaFX UI控件集成到现有的Java应用程序中…

JavaFX UI控件教程(三)之Label

翻译自 Label 本章介绍如何使用Label驻留在javafx.scene.controlJavaFX API包中的类来显示文本元素。了解如何包装文本元素以适合特定空间&#xff0c;添加图形图像或应用视觉效果。 图2-1显示了三种常见的标签用法。左侧的标签是带有图像的文本元素&#xff0c;中间的标签表…

asp.net core中负载均衡场景下http重定向https的问题

上周欣喜地发现&#xff0c;微软官方终于针对 asp.net core 在使用负载均衡的情况下从 http 强制重定向至 https 的问题提供了解决方法。 app.UseForwardedHeaders(new ForwardedHeadersOptions {ForwardedHeaders ForwardedHeaders.XForwardedProto });var options new Rew…

JavaFX UI控件教程(四)之Button

翻译自 Button Button通过JavaFX API提供的类使开发人员能够在用户单击按钮时处理操作。该Button班是的扩展Labeled类。它可以显示文本&#xff0c;图像或两者。图3-1显示了具有各种效果的按钮。在本章中&#xff0c;您将学习如何创建这些按钮类型。 图3-1按钮类型 创建一个按…