JavaFX - 3D 形狀

在前面的章節中,我們已經了解了如何在 JavaFX 應用程序中的 XY 平面上繪制 2D 形狀。除了這些 2D 形狀之外,我們還可以使用 JavaFX 繪制其他幾個 3D 形狀。

通常,3D 形狀是可以在 XYZ 平面上繪制的幾何圖形。它們由兩個或多個維度定義,通常是 length, width and depth。JavaFX 支持的 3D 形狀包括 Cylinder、Sphere 和 Box。

上面提到的每個 3D 形狀都由一個類表示,所有這些類都屬于 javafx.scene.shape 包。名為 Shape3D 的類是 JavaFX 中所有 3 維形狀的基類。

創建 3D 形狀

要創建 3-Dimensional 形狀,需要

實例化相應的類

要創建一個 3-Dimensional 形狀,首先你需要實例化它各自的類。例如,如果要創建一個 3D 框,則需要實例化名為 Box 的類,如下所示

Box box = new Box();

設置形狀的屬性

實例化類后,需要使用 setter 方法設置形狀的屬性。

例如,要繪制 3D 框,需要傳遞其 Width、Height、Depth。您可以使用各自的 setter 方法指定這些值,如下所示

//Setting the properties of the Box 
box.setWidth(200.0); 
box.setHeight(400.0);   
box.setDepth(200.0);

將 Shape 對象添加到組中

最后,需要通過將形狀的對象作為構造函數的參數傳遞來將其添加到組中,如下所示。?

//Creating a Group object  
Group root = new Group(box);
S.No

形狀和描述

1

Box

長方體是具有length?(depth),?width, and a?height.
長方體是具有 length (depth) 、 width 和 height 的三維形狀。

在 JavaFX 中,三維框由名為 Box 的類表示。此類屬于 javafx.scene.shape 包。

通過實例化此類,可以在 JavaFX 中創建一個 Box 節點。

此類具有 double 數據類型的 3 個屬性

width ? 框的寬度

height ? 框的高度

depth - 框的深度

2

Cylinder

圓柱體是一種封閉的實體,具有兩個平行(大部分為圓形)的底面,由曲面連接。

它由兩個參數描述,即其圓形底面的半徑和圓柱體的高度。

在 JavaFX 中,圓柱體由名為 Cylinder 的類表示。此類屬于 javafx.scene.shape 包。

通過實例化此類,您可以在 JavaFX 中創建一個圓柱體節點。此類具有 double 數據類型的 2 個屬性

height?? 圓柱體的高度

radius - 圓柱體的半徑

3

Sphere

球體定義為與 3D 空間中的給定點的距離相同的點集 r。這個距離 r 是球體的半徑,給定的點是球體的中心。

在 JavaFX 中,球體由名為 Sphere 的類表示。此類屬于 javafx.scene.shape 包。

通過實例化此類,可以在 JavaFX 中創建一個球體節點。

此類具有名為 radius 的 double 數據類型的屬性。它表示 Sphere 的半徑。

3D 對象的屬性

對于所有 3 維對象,可以在 JavaFX 中設置各種屬性。它們在下面列出?

?

JavaFX - 創建一個 Box

長方體是三維立體形狀。長方體由 6 個矩形組成,這些矩形以直角放置。使用方形面的長方體是立方體,如果面是矩形,而不是立方體,則它看起來像一個鞋盒。

長方體是具有 length (depth)、width 和 height 的三維形狀。在 JavaFX 中,這種類型的三維形狀被尋址為 Box;因為它可以是長方體或立方體,具體取決于形狀的測量值。

在 JavaFX 中,三維框由名為 Box 的類表示。此類屬于 javafx.scene.shape 包。通過實例化此類,可以在 JavaFX 中創建一個 Box 節點。?

繪制 3D 框的步驟

第 1 步:創建 Box

可以通過實例化名為 BOX 的類在 JavaFX 中創建 Box,該類屬于包 javafx.scene.shape 。您可以在 Application 類的 start() 方法中實例化此類,如下所示

public class ClassName extends Application {  @Override     public void start(Stage primaryStage) throws Exception {//Creating an object of the class Box Box box = new Box();   }    
}

第 2 步:將屬性設置為框

使用 3D 框各自的 setter 方法設置 3D 框的屬性 Width、Height 和 Depth ,如以下代碼塊所示

//Setting the properties of the Box 
box.setWidth(200.0); 
box.setHeight(400.0);   
box.setDepth(200.0);

第 3 步:創建 Group 對象?

在 start() 方法中,通過實例化名為 Group 的類來創建 group 對象,該類屬于包 javafx.scene 。將上一步中創建的 Box(節點)對象作為參數傳遞給 Group 類的構造函數。為了將其添加到組中,應執行此作,如下所示

Group root = new Group(box);

第 4 步:啟動應用程序

例1

下面是一個使用 JavaFX 生成 3D 框的程序。將此代碼保存在名為 BoxExample.java 的文件中。

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.shape.Box; 
import javafx.stage.Stage; public class BoxExample extends Application { @Override public void start(Stage stage) { //Drawing a Box Box box = new Box();  //Setting the properties of the Box box.setWidth(200.0); box.setHeight(400.0);   box.setDepth(200.0); //Creating a Group object  Group root = new Group(box); //Creating a scene object Scene scene = new Scene(root, 600, 300);   //Setting title to the Stage stage.setTitle("Drawing a Box"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); }public static void main(String args[]){ launch(args); } 
}

例2?

在前面的示例中,我們沒有指定要從中繪制框的開始和結束坐標。但是,使用 animation 類的 translateX 和 translateY 屬性,我們可以在 JavaFX 應用程序上重新定位該框。讓我們看一下下面的示例,并將其保存在名為 TranslateBoxExample.java 的文件中。

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.shape.Box;
import javafx.scene.paint.Color;
import javafx.scene.transform.Translate;
import javafx.stage.Stage; public class TranslateBoxExample extends Application { @Override public void start(Stage stage) { //Drawing a Box Box box = new Box();  //Setting the properties of the Box box.setWidth(200.0); box.setHeight(200.0);  box.setDepth(200.0);Translate translate = new Translate();       translate.setX(200); translate.setY(150); translate.setZ(25); box.getTransforms().addAll(translate);//Creating a Group object  Group root = new Group(box); //Creating a scene object Scene scene = new Scene(root, 400, 300);scene.setFill(Color.web("#81c483"));	  //Setting title to the Stage stage.setTitle("Translate a Box"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); }public static void main(String args[]){ launch(args); } 
}

JavaFX - 創建圓柱體

圓柱體是一種封閉的實體,具有兩個平行(大部分為圓形)的底面,由曲面連接。為了可視化,您可以將 3D 圓柱體視為一堆雜亂的 2D 圓圈,這些圓圈彼此堆疊到一定高度;因此,即使它由兩個參數描述,也使其成為三維形狀。

繪制 3D 圓柱體的步驟

第 1 步:創建類

通過實例化名為 Cylinder 的類,在 JavaFX 中創建一個 Cylinder 對象,該類屬于包 javafx.scene.shape 。您=可以在 start() 方法中實例化此類,如下所示??

public class ClassName extends Application {  @Override     public void start(Stage primaryStage) throws Exception {//Creating an object of the Cylinder class       Cylinder cylinder = new Cylinder();   }    
}

第 2 步:為 Cylinder 設置屬性

//Setting the properties of the Cylinder 
cylinder.setHeight(300.0f); 
cylinder.setRadius(100.0f); 

?第 3 步:創建 Group 對象?

Group root = new Group(cylinder);

?第 4 步:啟動應用程序

例1

下面的程序演示如何使用 JavaFX 生成 Cylinder。將此代碼保存在名為 CylinderExample.java 的文件中。

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.shape.CullFace; 
import javafx.scene.shape.Cylinder; 
import javafx.stage.Stage;public class CylinderExample extends Application { @Override public void start(Stage stage) { //Drawing a Cylinder Cylinder cylinder = new Cylinder(); //Setting the properties of the Cylinder cylinder.setHeight(300.0f); cylinder.setRadius(100.0f); //Creating a Group object  Group root = new Group(cylinder); //Creating a scene object Scene scene = new Scene(root, 600, 300);  //Setting title to the Stage stage.setTitle("Drawing a cylinder"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } 
}

?例2

還可以對 3D 形狀應用轉換。在此示例中,我們嘗試在 3D 圓柱體上應用平移轉換,并在應用程序上重新定位它。將此代碼保存在名為 TranslateCylinderExample.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.CullFace;
import javafx.scene.shape.Cylinder;
import javafx.scene.paint.Color;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;public class TranslateCylinderExample extends Application { @Override public void start(Stage stage) { //Drawing a Cylinder Cylinder cylinder = new Cylinder(); //Setting the properties of the Cylinder cylinder.setHeight(150.0f); cylinder.setRadius(100.0f);Translate translate = new Translate();       translate.setX(200); translate.setY(150); translate.setZ(25); cylinder.getTransforms().addAll(translate);	  //Creating a Group object  Group root = new Group(cylinder); //Creating a scene object Scene scene = new Scene(root, 400, 300); scene.setFill(Color.web("#81c483"));//Setting title to the Stage stage.setTitle("Drawing a cylinder"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } 
}

JavaFX - 創建球體

繪制 3D 球體的步驟

步驟 1:創建球體

public class ClassName extends Application { @Override     public void start(Stage primaryStage) throws Exception {//Creating an object of the class Sphere Sphere sphere = new Sphere();   }
}

第 2 步:為球體設置屬性

//Setting the radius of the Sphere 
sphere.setRadius(300.0);

?第 3 步:創建 Group 對象?

Group root = new Group(sphere);

?第 4 步:啟動應用程序

例1

以下程序演示如何使用 JavaFX 生成 Sphere。將此代碼保存在名為 SphereExample.java 的文件中

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.shape.Sphere; public class SphereExample extends Application { @Override public void start(Stage stage) { //Drawing a Sphere  Sphere sphere = new Sphere();  //Setting the properties of the Sphere sphere.setRadius(50.0);   sphere.setTranslateX(200); sphere.setTranslateY(150);      //Creating a Group object  Group root = new Group(sphere); //Creating a scene object Scene scene = new Scene(root, 600, 300);  //Setting title to the Stage stage.setTitle("Drawing a Sphere - draw fill");//Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); }      public static void main(String args[]){ launch(args); } 
}

例2?

?在下面的程序中,我們通過為 JavaFX 應用程序的場景著色來在 JavaFX 中應用一些 CSS。將此代碼保存在名為 CSSSphereExample.java 的文件中

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.shape.Sphere; public class CSSSphereExample extends Application { @Override public void start(Stage stage) { //Drawing a Sphere  Sphere sphere = new Sphere();  //Setting the properties of the Sphere sphere.setRadius(50.0);   sphere.setTranslateX(100); sphere.setTranslateY(150);      //Creating a Group object  Group root = new Group(sphere); //Creating a scene object Scene scene = new Scene(root, 300, 300);scene.setFill(Color.ORANGE);	  //Setting title to the Stage stage.setTitle("Drawing a Sphere");//Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); }      public static void main(String args[]){ launch(args); } 
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入理解開放尋址法中的三種探測序列

一、引言 開放尋址法是解決散列表中沖突的一種重要方法,當發生沖突(即兩個不同的鍵通過散列函數計算得到相同的散列值)時,它會在散列表中尋找下一個可用的存儲位置。而探測序列就是用于確定在發生沖突后,依次嘗試哪些…

【雙指針題目】

雙指針 美麗區間&#xff08;滑動窗口&#xff09;合并數列&#xff08;雙指針的應用&#xff09;等腰三角形全部所有的子序列 美麗區間&#xff08;滑動窗口&#xff09; 美麗區間 滑動窗口模板&#xff1a; int left 0, right 0;while (right < nums.size()) {// 增大…

為什么命令“echo -e “\033[9;0]“ > /dev/tty0“能控制開發板上的LCD不熄屏?

為什么命令"echo -e “\033[9;0]” > /dev/tty0"能控制開發板上的LCD不熄屏&#xff1f; 在回答這個問題前請先閱讀我之前寫的與tty和終端有關的博文 https://blog.csdn.net/wenhao_ir/article/details/145431655 然后再來看這條命令的解釋就要容易些了。 這條…

嵌入式八股文面試題(一)C語言部分

1. 變量/函數的聲明和定義的區別&#xff1f; &#xff08;1&#xff09;變量 定義不僅告知編譯器變量的類型和名字&#xff0c;還會分配內存空間。 int x 10; // 定義并初始化x int x; //同樣是定義 聲明只是告訴編譯器變量的名字和類型&#xff0c;但并不為它分配內存空間…

go-zero學習筆記(三)

利用goctl生成rpc服務 編寫proto文件 // 聲明 proto 使用的語法版本 syntax "proto3";// proto 包名 package demoRpc;// golang 包名(可選) option go_package "./demo";// 如需為 .proto 文件添加注釋&#xff0c;請使用 C/C 樣式的 // 和 /* ... */…

Javascript代碼庫-jQuery入門

摘自千鋒教育kerwin的js教程 jQuery 是一個前端庫&#xff0c;也是一個方法庫他里面封裝著一些列的方法供我們使用我們常用的一些方法它里面都有&#xff0c;我們可以直接拿來使用就行了jQuery 之所以好用&#xff0c;很多人愿意使用&#xff0c;是因為他的幾個優點太強大了 優…

【25考研】南開軟件考研復試復習重點!

一、復試內容 復試采取現場復試的方式。復試分為筆試、機試和面試三部分。三部分合計100分&#xff0c;其中筆試成績占30%、機試成績占30%、面試成績占40%。 1.筆試&#xff1a;專業綜合基礎測試 考核方式&#xff1a;閉卷考試&#xff0c;時長為90分鐘。 筆試考查內容范圍…

【最長上升子序列Ⅱ——樹狀數組,二分+DP,純DP】

題目 代碼&#xff08;只給出樹狀數組的&#xff09; #include <bits/stdc.h> using namespace std; const int N 1e510; int n, m; int a[N], b[N], f[N], tr[N]; //f[i]表示以a[i]為尾的LIS的最大長度 void init() {sort(b1, bn1);m unique(b1, bn1) - b - 1;for(in…

012-51單片機CLD1602顯示萬年歷+鬧鐘+農歷+整點報時

1. 硬件設計 硬件是我自己設計的一個通用的51單片機開發平臺&#xff0c;可以根據需要自行焊接模塊&#xff0c;這是用立創EDA畫的一個雙層PCB板&#xff0c;所以模塊都是插針式&#xff0c;不是表貼的。電路原理圖在文末的鏈接里&#xff0c;PCB圖暫時不選擇開源。 B站上傳的…

容器迭代器iterator

文章目錄 1、自定義String實現iterator2、自定義vector實現iterator3、迭代器失效問題 迭代器的功能&#xff1a;提供一種統一的方式&#xff0c;來透明的遍歷容器。 迭代器可以透明的訪問容器內部的元素的值&#xff0c;而無需了解其底層遍歷機制具體是數組的下標還是鏈表的指…

對象的實例化、內存布局與訪問定位

一、創建對象的方式 二、創建對象的步驟: 一、判斷對象對應的類是否加載、鏈接、初始化: 虛擬機遇到一條new指令&#xff0c;首先去檢查這個指令的參數能否在Metaspace的常量池中定位到一個類的符號引用&#xff0c;并且檢查這個符號引用代表的類是否已經被加載、解析和初始化…

傳輸層協議 UDP 與 TCP

&#x1f308; 個人主頁&#xff1a;Zfox_ &#x1f525; 系列專欄&#xff1a;Linux 目錄 一&#xff1a;&#x1f525; 前置復盤&#x1f98b; 傳輸層&#x1f98b; 再談端口號&#x1f98b; 端口號范圍劃分&#x1f98b; 認識知名端口號 (Well-Know Port Number) 二&#xf…

實驗十一 Servlet(二)

實驗十一 Servlet(二) 【實驗目的】 1&#xff0e;了解Servlet運行原理 2&#xff0e;掌握Servlet實現方式 【實驗內容】 改造實驗10&#xff0c;引入數據庫&#xff0c;創建用戶表&#xff0c;包括用戶名和密碼&#xff1a;客戶端通過login.jsp發出登錄請求&#xff0c;請求…

服務SDK三方新版中央倉庫和私服發布詳解

預備信息Github倉庫發布Gradle版本匹配Gradle項目構建全局變量定義Gradle項目Nexus倉庫配置與發布過程Gradle項目發布至Sonatype中央倉庫配置過程總結當我們在實現一個項目技術總結、工具類封裝或SDK封裝,通常是為了方便開發者使用特定服務或平臺而提供的一組工具和API。您可能…

git 新項目

新項目git 新建的項目如何進行git 配置git git config --global user.name "cc" git config --global user.email ccexample.com配置遠程倉庫路徑 // 添加 git remote add origin http://gogs/cc/mc.git //如果配錯了&#xff0c;刪除 git remote remove origin初…

openmv的端口被拆分為兩個 導致電腦無法訪問openmv文件系統解決辦法 openmv USB功能改動 openmv驅動被更改如何修復

我之前誤打誤撞遇到一次&#xff0c;直接把openmv的全部端口刪除卸載然后重新插上就會自動重新裝上一個openmv端口修復成功&#xff0c;大家可以先試試不行再用下面的方法 全部卸載再重新插拔openmv 要解決OpenMV IDE中出現的兩個端口問題&#xff0c;可以嘗試以下步驟&#x…

利用Python高效處理大規模詞匯數據

在本篇博客中&#xff0c;我們將探討如何使用Python及其強大的庫來處理和分析大規模的詞匯數據。我們將介紹如何從多個.pkl文件中讀取數據&#xff0c;并應用一系列算法來篩選和擴展一個核心詞匯列表。這個過程涉及到使用Pandas、Polars以及tqdm等庫來實現高效的數據處理。 引…

LabVIEW雙光子成像系統:自主創新,精準成像,賦能科研

雙光子成像系統&#xff1a;自主創新&#xff0c;精準成像&#xff0c;賦能科研 第一部分&#xff1a;概述 雙光子成像利用兩個低能量光子同時激發熒光分子&#xff0c;具有深層穿透、高分辨率、低光損傷等優勢。它能實現活體深層組織的成像&#xff0c;支持實時動態觀察&…

Deepseek-R1 和 OpenAI o1 這樣的推理模型普遍存在“思考不足”的問題

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

Vue3學習筆記-Vue開發前準備-1

一、安裝15.0或更高版本的Node.js node -v npm -v 二、創建Vue項目 npm init vuelatest 三、Vue項目結構 node_modules: Vue項目運行的依賴文件public&#xff1a;資源文件夾package.json&#xff1a;信息描述文件