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,一经查实,立即删除!

相关文章

ssl2293-暗黑游戏【dp练习题】

题目&#xff1a; 暗黑游戏中&#xff0c;装备直接决定玩家人物的能力。可以使用Pg和Rune购买需要的物品。暗黑市场中的装备&#xff0c;每件有不同的价格&#xff08;Pg和Rune&#xff09;、能力值、最大可购买件数。Kid作为暗黑战网的一个玩家&#xff0c;当然希望使用尽可能…

java知识点整理

1.char类型可以整型类型的值 2.变量的命名规则&#xff1a; (1)由字母、、$ 开头的 (2)后面部分可以拾字母、数字、下划线、$ (3)不能是java的关键词 (4)变量名要有意义 3.0是偶数 4.数据类型转换规则&#xff1a; int(源类型) a 1.0(目标类型); (1)源类型大于目标类型&#…

比特(bit)和字节(byte)(1byte=8bit)

一个0或者一个1存储为一个比特(bit)&#xff0c;是计算机中最小的存储单位。 计算机中是最基本的存储单元是字节(byte) 。每个字节由8个比特构成。

定位

绝对定位 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style>.div1{height: 200px;width: 200px;background-color: gray;/*绝对定位 基于父级标签原点移开以后会自动释放父级标签原点位置*/po…

Web前端知识体系精简

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

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

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

《金色梦乡》金句摘抄(十一)

System.out.println("《金色梦乡》"); System.out.println("小说类型的书就是比散文类型的书好看"); System.out.println("通俗易懂"); System.out.println("今天准备看完");从一开始他就觉得难以置信&#xff0c;感觉就像是身处迷雾当…

ssl2295-暗黑破坏神【dp练习】

题目&#xff1a; 无聊中的小x玩起了Diablo I... 游戏的主人公有n个魔法 每个魔法分为若干个等级&#xff0c;第i个魔法有p[i]个等级(不包括0) 每个魔法的每个等级都有一个效果值&#xff0c;一个j级的i种魔法的效果值为w[i][j] 魔法升一级需要一本相应的魔法书 购买魔法书…

内存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;都是在不同的类中创建的。在…

《走遍中国》珍藏版(一)

Console.WriteLine("上一本书已经看完&#xff0c;从今天开始看下一本"); System.out.println("《走遍中国》珍藏版"); System.out.println("这本书是关于地理的"); System.out.println("地理往往是和历史进行紧密联系的");北京、天津…

MySQL建表,DML,DDL,约束,外键策略

创建数据库表 CREATE TABLE student( sno int (6), sname VARCHAR(10), sex CHAR(1), age INT(2), enterdate date, classname VARCHAR(10), email VARCHAR(15) ); – 查看表的结构 desc student – 查看表的数据 SELECT * FROM student DML – 查询表的数据 SELECT * FRO…

ssl1197-质数和分解【dp练习】

Description   任何大于 1 的自然数 n&#xff0c;都可以写成若干个大于等于 2 &#xff0c;且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况)&#xff0c;并且可能有不止一种质数和的形式。例如9 的质数和表达式就有四种本质不同的形式&#xff1a; 9 …

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

像素密度√[(长度像素数)^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;…

《走遍中国》珍藏版(二)

Console.WriteLine("上一本书已经看完&#xff0c;从今天开始看下一本"); System.out.println("《走遍中国》珍藏版"); System.out.println("这本书是关于地理的"); System.out.println("地理往往是和历史进行紧密联系的");大门两侧傲…

单表查询

最简单的查询语句 select * from dept select * from emp; – 显示部分列 select empno,ename,sal ,comm,deptno from emp – 显示部分行 where select empno,ename,sal ,comm,deptno from emp where sal<2500 – 别名 select empno 编号,ename 姓名,sal 工资 ,comm 补助…

ssl1072-砝码称重【dp练习】

Description 设有1g、2g、3g、5g、10g、20g的砝码各若干枚&#xff08;其总重<1000&#xff09;&#xff0c; 要求&#xff1a; 输入方式&#xff1a;a1 a2 a3 a4 a5 a6 &#xff08;表示1g砝码有a1个&#xff0c;2g砝码有a2个&#xff0c;…&#xff0c;20g砝码有a6个&…