圖形變換算法

一、學習目的

(1)掌握多面體的存儲方法。
(2)掌握圖形的幾何變換及投影變換。
(3)掌握三維形體不同投影方法的投影圖的生成原理。
(4)掌握多面體投影圖繪制的編程方法。

二、學習內容

(1)編程實現一個長方體的正軸測投影圖。
(2)編程實現一個長方體的斜平行投影圖。
(3)編程實現一個長方體的一點透視圖。

三、基本算法


1. ?坐標系變換算法

  • ?旋轉矩陣構造
    用于將任意投影面對齊到標準坐標系(如XOY平面)。通過繞軸旋轉(如繞X/Y/Z軸),結合 ?羅德里格斯旋轉公式?或 ?歐拉角,生成旋轉變換矩陣,使投影面法向量對齊目標軸(如Z軸)。
  • ?平移變換
    將投影面平移到原點,簡化投影計算。

2. ?投影矩陣算法

  • ?正軸測投影
    通過正交投影矩陣移除深度坐標(Z軸),結合繞軸旋轉實現立體效果。
  • ?斜平行投影
    引入 ?錯切矩陣?(Shear Matrix),沿某一軸向偏移深度坐標,模擬斜視角。
  • ?一點透視投影
    構造 ?透視矩陣,引入滅點(Vanishing Point)。

四、具體代碼

import numpy as np
import matplotlib.pyplot as pltclass Cube:def __init__(self, size=1):self.vertices = np.array([[0, 0, 0],[size, 0, 0],[size, size, 0],[0, size, 0],[0, 0, size],[size, 0, size],[size, size, size],[0, size, size]])self.edges = [[0, 1], [1, 2], [2, 3], [3, 0],[4, 5], [5, 6], [6, 7], [7, 4],[0, 4], [1, 5], [2, 6], [3, 7]]def orthographic_projection(self):return self.vertices[:, :2]def oblique_parallel_projection(self, alpha=np.pi/4, l=0.5):P = np.array([[1, 0, -l*np.cos(alpha)],[0, 1, -l*np.sin(alpha)],[0, 0, 0]])return np.dot(self.vertices, P.T)def one_point_perspective_projection(self, d=5):P = np.array([[1, 0, 0, 0],[0, 1, 0, 0],[0, 0, 1, 0],[0, 0, -1/d, 0]])homogeneous_vertices = np.hstack((self.vertices, np.ones((8, 1))))projected = np.dot(homogeneous_vertices, P.T)return (projected[:, :2].T / projected[:, 3]).Tdef plot_projection(self, projection, title):projected_vertices = projection()plt.figure()for edge in self.edges:plt.plot(projected_vertices[edge, 0], projected_vertices[edge, 1], 'b')plt.title(title)plt.axis('equal')plt.show()if __name__ == '__main__':cube = Cube()cube.plot_projection(cube.orthographic_projection, 'Orthographic Projection')cube.plot_projection(lambda: cube.oblique_parallel_projection(), 'Oblique Parallel Projection')cube.plot_projection(cube.one_point_perspective_projection, 'One-Point Perspective Projection')

五、運行結果

六、項目簡介

# 立方體投影項目

## 項目概述

這個Python項目演示了立方體的三種不同投影方法:正交投影、斜平行投影和一點透視投影。

## 投影方法說明

1. **正交投影(Orthographic Projection)**: 直接忽略Z坐標,將3D點投影到XY平面

2. **斜平行投影(Oblique Parallel Projection)**: 保持平行線,但以一定角度顯示

3. **一點透視投影(One-Point Perspective Projection)**: 模擬人眼看到的透視效果

## 運行要求

- Python 3.x

- NumPy

- Matplotlib

## 示例代碼

```python

import numpy as np

import matplotlib.pyplot as plt

from cube_projections import Cube

cube = Cube()

cube.plot_projection(cube.orthographic_projection, 'Orthographic Projection')

```

## 預期輸出

運行后會顯示三個窗口,分別展示三種不同的立方體投影效果圖。

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

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

相關文章

【JAVAFX】自定義FXML 文件存放的位置以及使用

情況 1:FXML 文件與調用類在同一個包中(推薦) 假設類 MainApp 的包是 com.example,且 FXML 文件放在 resources/com/example 下: 項目根目錄 ├── src │ └── sample │ └── Main.java ├── src/s…

Ubuntu20.04安裝企業微信

建議先去企業微信官網看一下有沒有linux版本,沒有的話在按如下方式安裝,不過現在是沒有的。 方案 1、使用docker容器 2、使用deepin-wine 3、使用星火應用商店 4. 使用星火包deepin-wine 5、使用ukylin-wine 本人對docker不太熟悉,現…

CSS appearance 屬性:掌握UI元素的原生外觀

在現代網頁設計中,為了達到一致的用戶體驗,我們有時需要讓HTML元素模仿操作系統的默認控件樣式。CSS中的appearance屬性提供了一種簡便的方式來控制這些元素是否以及如何顯示其默認外觀。本文將詳細介紹appearance屬性,并通過實際代碼示例來展…

十四、C++速通秘籍—函數式編程

目錄 上一章節: 一、引言 一、函數式編程基礎 三、Lambda 表達式 作用: Lambda 表達式捕獲值的方式: 注意: 四、函數對象 函數對象與普通函數對比: 五、函數適配器 1、適配普通函數 2、適配 Lambda 表達式 …

大模型Rag-指令調度

本文主要記錄根據用戶問題指令,基于大模型做Rag,匹配最相關描述集進行指令調度,可用于匹配后端接口以及展示答案及圖表等。 1.指令查詢處理邏輯 1.實現思路 指令識別:主要根據用戶的問題q計算與指令描述集is [i0, ... , im]和指…

音視頻學習 - ffmpeg 編譯與調試

編譯 環境 macOS Ventrua 13.4 ffmpeg 7.7.1 Visual Studio Code Version: 1.99.0 (Universal) 操作 FFmpeg 下載源碼 $ cd ffmpeg-x.y.z $ ./configure nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.If you think configure made a mistake…

golang-常見的語法錯誤

https://juejin.cn/post/6923477800041054221 看這篇文章 Golang 基礎面試高頻題詳細解析【第一版】來啦~ 大叔說碼 for-range的坑 func main() { slice : []int{0, 1, 2, 3} m : make(map[int]*int) for key, val : range slice {m[key] &val }for k, v : …

音視頻之H.265/HEVC預測編碼

H.265/HEVC系列文章: 1、音視頻之H.265/HEVC編碼框架及編碼視頻格式 2、音視頻之H.265碼流分析及解析 3、音視頻之H.265/HEVC預測編碼 預測編碼是視頻編碼中的核心技術之一。對于視頻信號來說,一幅圖像內鄰近像素之間有著較強的空間相關性,相鄰圖像之…

基于政務問答的dify接口請求測試

Dify 的智能體后端服務 API 為開發者提供便捷方式,能讓前端應用直接調用大語言模型能力。在請求時,需先前往應用左側導航的 “API Access” 部分,在此可查看文檔和管理訪問憑據。為保障安全,API 密鑰應通過后端調用,避…

VMware Workstation 保姆級 Linux(CentOS) 創建教程(附 iso)

文章目錄 一、下載二、創建 一、下載 CentOS-7.9-x86_64-DVD-2009.iso 二、創建 VMware Workstation 保姆級安裝教程(附安裝包) VMware Workstation 保姆級安裝教程(附安裝包) VMware Workstation 保姆級安裝教程(附安裝包)

擴增子分析|基于R語言microeco包進行微生物群落網絡分析(network網絡、Zi-Pi關鍵物種和subnet子網絡圖)

一、引言 microeco包是福建農林大學姚敏杰教授團隊開發的擴增子測序集成分析。該包綜合了擴增子測序下游分析的多種功能包括群落組成、多樣性、網絡分析、零模型等等。通過簡單的幾行代碼可實現復雜的分析。因此,microeco包發表以來被學界廣泛關注,截止2…

GO語言-數據類型

文章目錄 變量定義1. 整數類型2. 浮點類型3. 字符類型4. 布爾類型5. 字符串類型5.1 字符串的本質5.2 常用字符串處理函數(strings包)5.3 修改字符串的方式 6. 數據默認值7. 類型轉換 變量定義 代碼如下: package mainimport "fmt"var i1 1000 var i2 i…

線性代數 | 知識點整理 Ref 2

注:本文為 “線性代數 | 知識點整理” 相關文章合輯。 因 csdn 篇幅合并超限分篇連載,本篇為 Ref 2。 略作重排,未整理去重。 圖片清晰度限于引文原狀。 如有內容異常,請看原文。 【數學】線性代數知識點總結 阿巴 Jun 于 2024-…

JavaSE學習(前端初體驗)

文章目錄 前言一、準備環境二、創建站點(創建一個文件夾)三、將站點部署到編寫器中四、VScode實用小設置五、案例展示 前言 首先了解前端三件套:HTML、CSS、JS HTML:超文本標記語言、框架層、描述數據的; CSS&#xf…

java + spring boot + mybatis 通過時間段進行查詢

前端傳來的只有日期內容&#xff0c;如&#xff1a;2025-04-17 需要在日期內容的基礎上補充時間部分&#xff0c;代碼示例&#xff1a; /*** 日志查詢&#xff08;分頁查詢&#xff09;* param recordLogQueryDTO 查詢參數對象* return 日志列表*/Overridepublic PageBean<…

解決ubuntu自帶火狐瀏覽器無法播放視頻問題

TIPS:一般執行完1 就可以了 首先安裝必要的媒體編解碼器和插件&#xff1a; # 安裝常用媒體編解碼器和插件 sudo apt update sudo apt install -y ubuntu-restricted-extras# 安裝額外的編解碼器 sudo apt install -y ffmpeg# 安裝其他視頻相關包 sudo apt install -y libavc…

計算機網絡:流量控制與可靠傳輸機制

目錄 基本概念 流量控制&#xff1a;別噎著啦&#xff01; 可靠傳輸&#xff1a;快遞必達服務 傳輸差錯&#xff1a;現實中的意外 滑動窗口 基本概念 換句話說&#xff1a;批量發貨排隊驗收 停止-等待協議 SW&#xff08;發1份等1份&#xff09; 超時重傳&#xff1a;…

Android組件刷新

Android中刷新View的方法有以下幾種&#xff1a; 調用invalidate()方法&#xff0c;該方法會使View樹中的所有視圖無效或臟&#xff0c;等待下一次繪制時重新繪制。例如&#xff1a; mCustomView.invalidate(); 調用postInvalidate()方法&#xff0c;該方法類似于invalidate()…

Pycharm(十四)函數

一、函數概述 函數也叫方法,可以用function(函數,功能),method(方法)來表示。函數是把具有獨立功能的代碼封裝到一起,使其成為具有獨立功能的代碼集。 它的好處:1.提高代碼的復用性;2.模塊化編程。 1.1 定義格式 def 函數名(形式參數1,形式參數2...): 函數體,就是邏…

Oracle測試題目及筆記(多選)

所有題目來自于互聯網搜索 在以下概要文件的陳述中&#xff0c;哪兩個是正確的&#xff1f; &#xff08;D 和 E&#xff09; A&#xff0e; 概要文件不能被用來為賬戶加鎖 B&#xff0e; 概要文件不能被用來控制資源使用 C&#xff0e; 數據庫管理員可以使用概要文件更改用戶密…