圖形學初識--空間變換

文章目錄

  • 前言
  • 正文
    • 矩陣和向量相乘
    • 二維變換
      • 1、縮放
      • 2、旋轉
      • 3、平移
      • 4、齊次坐標下總結
    • 三維變換
      • 1、縮放
      • 2、平移
      • 3、旋轉
        • 繞X軸旋轉:
        • 繞Z軸旋轉:
        • 繞Y軸旋轉:
  • 結尾:喜歡的小伙伴可以點點關注+贊哦

前言

前面章節補充了一下基本的線性代數中關于向量和矩陣的背景知識,這一節咱們講解一下在二維和三維中常用的空間變換,主要包括:平移、旋轉、縮放等!

正文

矩陣和向量相乘

假設有一個矩陣 M M M,有一個向量 P = ( x y ) P = \begin{pmatrix} x\\y \end{pmatrix} P=(xy?),則令 P ? ′ = M × P ? = ( x ′ y ′ ) \vec P' = M \times \vec P = \begin{pmatrix} x'\\y' \end{pmatrix} P =M×P =(xy?).

從上節,我們已經知道矩陣和向量相乘結果還是個向量,假設我們把向量 P P P 看作一個坐標,那么 P ′ P' P 的坐標就是矩陣 M M M 應用之后的結果,此時我們稱對點 P P P應用矩陣 M M M的變換。

二維變換

假設在二維空間下,矩陣 M M M 是2x2的,向量 P = ( x y ) P = \begin{pmatrix} x\\y \end{pmatrix} P=(xy?) 是二維向量。

矩陣乘向量在二維空間本質理解: 假設我們將 M M M 按照列方向,分解成兩個列向量 ( α 1 ? , α 2 ? ) (\vec{\alpha_1}, \vec{\alpha_2}) (α1? ?,α2? ?),則 P ′ ? = ( x α 1 ? + y α 2 ? ) \vec{P'} = (x\vec{\alpha_1} + y\vec{\alpha_2}) P =(xα1? ?+yα2? ?)

結果表明: 矩陣和向量相乘,就相當于向量的軸分量作為權重,給矩陣的列向量加權求和!

類似的,我們也可以把矩陣按照行向量分解,也可以表達成矩陣的行向量加權相加的形式。只不過列向量分解形式更為常見!

1、縮放

縮放矩陣M如下, S x S_x Sx? 為x軸向的縮放因子, S y S_y Sy? 為y軸向的縮放因子。
[ s x 0 0 s y ] \begin{bmatrix} s_x & 0\\ 0 & s_y\\ \end{bmatrix} [sx?0?0sy??]
P ′ = M P = [ s x 0 0 s y ] ? ( x y ) = ( s x ? x s y ? y ) P' = MP = \begin{bmatrix} s_x & 0\\ 0 & s_y\\ \end{bmatrix} * \begin{pmatrix} x\\y \end{pmatrix} = \begin{pmatrix} s_x * x\\s_y * y \end{pmatrix} P=MP=[sx?0?0sy??]?(xy?)=(sx??xsy??y?)

舉個例子: M = [ 0.5 0 0 0.5 ] M = \begin{bmatrix} 0.5& 0\\ 0 & 0.5\\ \end{bmatrix} M=[0.50?00.5?] P = ( 2 2 ) P = \begin{pmatrix} 2\\2 \end{pmatrix} P=(22?),則 P ′ = ( 1 1 ) P' = \begin{pmatrix} 1\\1 \end{pmatrix} P=(11?),如下圖所示:

在這里插入圖片描述

2、旋轉

默認地,正角度旋轉代表逆時針,如下圖所示的紅色正方形,就是旋轉45°

在這里插入圖片描述

旋轉矩陣 R θ R_\theta Rθ? 如下:
[ cos ? θ ? sin ? θ sin ? θ cos ? θ ] \begin{bmatrix} \cos \theta & -\sin \theta\\ \sin \theta & \cos \theta\\ \end{bmatrix} [cosθsinθ??sinθcosθ?]

基本推導如下圖:

在這里插入圖片描述

我們使用最笨的待定系數法求解,將矩陣 R θ R_{\theta} Rθ? 設為 [ A B C D ] \begin{bmatrix} A & B\\ C & D\\ \end{bmatrix} [AC?BD?],然后將兩個點的前后結果帶入計算,如下:
[ A B C D ] ( 1 0 ) = ( cos ? θ sin ? θ ) , [ A B C D ] ( 0 1 ) = > ( ? sin ? θ cos ? θ ) \begin{bmatrix} A & B\\ C & D\\ \end{bmatrix}\begin{pmatrix} 1\\0 \end{pmatrix} = \begin{pmatrix} \cos{\theta}\\\sin{\theta} \end{pmatrix}, \begin{bmatrix} A & B\\ C & D\\ \end{bmatrix}\begin{pmatrix} 0\\1 \end{pmatrix} => \begin{pmatrix} -\sin{\theta}\\\cos{\theta} \end{pmatrix} [AC?BD?](10?)=(cosθsinθ?)[AC?BD?](01?)=>(?sinθcosθ?)
所以自然得到:
A = cos ? θ B = ? sin ? θ C = sin ? θ D = c o s θ \begin{align} A &= \cos \theta\\ B &= -\sin \theta\\ C &= \sin \theta\\ D &= cos \theta\\ \end{align} ABCD?=cosθ=?sinθ=sinθ=cosθ??

3、平移

平移就是讓x軸和y軸的坐標分別偏移一定的量,如下圖所示:

在這里插入圖片描述

x ′ = x + t x y ′ = y + t y x' = x + t_x\\ y' = y + t_y x=x+tx?y=y+ty?

我們記 P = ( x y ) P = \begin{pmatrix} x\\y \end{pmatrix} P=(xy?) P ′ = ( x ′ y ′ ) P' = \begin{pmatrix} x'\\y' \end{pmatrix} P=(xy?) T = ( t x t y ) T = \begin{pmatrix} t_x\\t_y \end{pmatrix} T=(tx?ty??) ,則上述可以表示為 P ′ ? = P ? + T ? \vec{P'} = \vec P + \vec T P =P +T

但是我們發現,上述的形式沒有用上矩陣,但在數學、物理中,人們都講究統一,因此人們引入了齊次坐標的概念。

為了迎合平移也能統一使用矩陣進行變換,認為的給二維的向量添加一個維度,升為三維,如下:
p o s i t i o n = ( x y 1 ) , v e c t o r = ( x y 0 ) position = \begin{pmatrix} x\\y\\1 \end{pmatrix},vector = \begin{pmatrix} x\\y\\0 \end{pmatrix} position= ?xy1? ?vector= ?xy0? ?
我們發現,位置向量咱們第三維補充1,方向向量咱們第三維補充0。

于是,咱們自然而然就可以定義出平移矩陣T,如下:
T = [ 1 0 t x 0 1 t y 0 0 1 ] 注: t x 表示 x 軸的偏移量, t y 表示 y 軸的偏移量 T = \begin{bmatrix} 1 & 0 & t_x\\ 0 & 1 & t_y\\ 0 & 0 & 1 \end{bmatrix}\\ 注:t_x 表示x軸的偏移量,t_y表示y軸的偏移量 T= ?100?010?tx?ty?1? ?注:tx?表示x軸的偏移量,ty?表示y軸的偏移量
于是,針對位置點的平移、以及位置向量的平移計算結果如下:

在這里插入圖片描述

我們發現,方向向量的結果沒有變化,這難道出問題了么?并沒有,因為方向向量本身就是位置無關的,不變才是對的,而針對某個頂點是變化了的,這就符合咱們的要求!

4、齊次坐標下總結

引入齊次坐標后,縮放和旋轉矩陣多了一個維度,這里列舉一下:

縮放矩陣:
S = [ s x 0 0 0 s y 0 0 0 1 ] S = \begin{bmatrix} s_x & 0 & 0\\ 0 & s_y & 0\\ 0 & 0 & 1 \end{bmatrix} S= ?sx?00?0sy?0?001? ?
旋轉矩陣:
R = [ cos ? θ ? sin ? θ 0 sin ? θ cos ? θ 0 0 0 1 ] R = \begin{bmatrix} \cos \theta & -\sin \theta & 0\\ \sin \theta & \cos \theta & 0\\ 0 & 0 & 1 \end{bmatrix} R= ?cosθsinθ0??sinθcosθ0?001? ?

平移矩陣:
T = [ 1 0 t x 0 1 t y 0 0 1 ] T = \begin{bmatrix} 1 & 0 & t_x\\ 0 & 1 & t_y\\ 0 & 0 & 1 \end{bmatrix}\\ T= ?100?010?tx?ty?1? ?

三維變換

首先,由于多引入了一個維度,復雜度上升。坐標系自然而然分為兩種:左手系、右手系,示意圖如下:

在這里插入圖片描述

**為了方便,后續三維空間中的矩陣變換講解以右手系為例!**左手系也是類似,大家熟練之后可自行推導!

同理,在三維坐標系下,同樣為了統一平移的操作,引入齊次坐標后,變換矩陣都是4x4的,這里不多贅述!

1、縮放

由于縮放最是容易,也最容易理解,這里直接給出縮放矩陣:
S = [ s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 ] 注: s x 、 s y 、 s z 分別為 x 、 y 、 z 軸的縮放比例 S = \begin{bmatrix} s_x & 0 & 0 & 0\\ 0 & s_y & 0 & 0\\ 0 & 0 & s_z & 0\\ 0 & 0 & 0 & 1 \end{bmatrix}\\ 注:s_x、s_y、s_z分別為x、y、z軸的縮放比例 S= ?sx?000?0sy?00?00sz?0?0001? ?注:sx?sy?sz?分別為xyz軸的縮放比例

2、平移

也是類似,這里直接給出平移矩陣:
T = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] 注: t x 、 t y 、 t z 分別為 x 、 y 、 z 軸的偏移量 T = \begin{bmatrix} 1 & 0 & 0 & t_x\\ 0 & 1 & 0 & t_y\\ 0 & 0 & 1 & t_z\\ 0 & 0 & 0 & 1 \end{bmatrix}\\ 注:t_x、t_y、t_z分別為x、y、z軸的偏移量 T= ?1000?0100?0010?tx?ty?tz?1? ?注:tx?ty?tz?分別為xyz軸的偏移量

3、旋轉

由于三維世界中,旋轉并不是繞一個點,而是繞一個旋轉軸,所以最簡單的旋轉就是繞:x、y、z軸的旋轉。

旋轉規則: 繞某個軸旋轉 θ \theta θ 角度,就是表明逆著此軸的方向眼睛看過去,逆時針旋轉 θ \theta θ 角度。

例如如下示意圖就是繞z軸旋轉 θ \theta θ 角度:

在這里插入圖片描述

并且我們一定要理解,繞z軸轉動時,所有點的z坐標是不會變化的!

這里需要對照二維空間中的旋轉矩陣的理解,本質上:二維旋轉就是將兩個相互垂直的基向量作為坐標軸,逆時針旋轉的結果

所以,上述的繞z軸的旋轉,可以理解為基向量就是 ( 1 0 0 ) \begin{pmatrix} 1\\0\\0 \end{pmatrix} ?100? ? ( 0 1 0 ) \begin{pmatrix} 0\\1\\0 \end{pmatrix} ?010? ?

這里給出一個基本任意正交基向量 i ? 、 j ? \vec{i}、\vec{j} i j ? 的旋轉示意圖:

在這里插入圖片描述

繞X軸旋轉:

示意圖如下:

在這里插入圖片描述

因此,我們只是將基向量變成 ( 0 1 0 ) \begin{pmatrix} 0\\1\\0 \end{pmatrix} ?010? ? ( 0 0 1 ) \begin{pmatrix} 0\\0\\1 \end{pmatrix} ?001? ?

所以,很容易構造出以下等式:
[ 1 0 0 0 0 cos ? θ ? sin ? θ 0 0 sin ? θ cos ? θ 0 0 0 0 1 ] ( x i j 1 ) = ( x cos ? θ ? i ? sin ? θ ? j sin ? θ ? i + cos ? θ ? j 1 ) \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & \cos{\theta} & -\sin{\theta} & 0\\ 0 & \sin{\theta} & \cos{\theta} & 0\\ 0 & 0 & 0 & 1 \end{bmatrix}\\ \begin{pmatrix} x\\i\\j\\1 \end{pmatrix} =\begin{pmatrix} x\\\cos{\theta}*i - \sin{\theta} * j\\\sin{\theta}*i + \cos{\theta} * j\\1 \end{pmatrix} ?1000?0cosθsinθ0?0?sinθcosθ0?0001? ? ?xij1? ?= ?xcosθ?i?sinθ?jsinθ?i+cosθ?j1? ?

自然而然可以得出,繞x軸的旋轉矩陣如下:
R x = [ 1 0 0 0 0 cos ? θ ? sin ? θ 0 0 sin ? θ cos ? θ 0 0 0 0 1 ] R_x = \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & \cos{\theta} & -\sin{\theta} & 0\\ 0 & \sin{\theta} & \cos{\theta} & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} Rx?= ?1000?0cosθsinθ0?0?sinθcosθ0?0001? ?

繞Z軸旋轉:

同理,示意圖:

在這里插入圖片描述

容易構造出以下等式:
[ cos ? θ ? sin ? θ 0 0 sin ? θ cos ? θ 0 0 0 0 1 0 0 0 0 1 ] ( i j z 1 ) = ( cos ? θ ? i ? sin ? θ ? j sin ? θ ? i + cos ? θ ? j z 1 ) \begin{bmatrix} \cos{\theta} & -\sin{\theta} & 0 & 0\\ \sin{\theta} & \cos{\theta} & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix}\\ \begin{pmatrix} i\\j\\z\\1 \end{pmatrix} =\begin{pmatrix} \cos{\theta}*i - \sin{\theta} * j\\\sin{\theta}*i + \cos{\theta} * j\\z\\1 \end{pmatrix} ?cosθsinθ00??sinθcosθ00?0010?0001? ? ?ijz1? ?= ?cosθ?i?sinθ?jsinθ?i+cosθ?jz1? ?
自然而然可以得出,繞z軸的旋轉矩陣如下:
R z = [ cos ? θ ? sin ? θ 0 0 sin ? θ cos ? θ 0 0 0 0 1 0 0 0 0 1 ] R_z = \begin{bmatrix} \cos{\theta} & -\sin{\theta} & 0 & 0\\ \sin{\theta} & \cos{\theta} & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} Rz?= ?cosθsinθ00??sinθcosθ00?0010?0001? ?

繞Y軸旋轉:

Y軸相比X和Z比較特殊,也是新手初學三維空間旋轉最容易困惑的地方。但在咱們這里不存在,示意圖如下:

在這里插入圖片描述

容易構造出以下等式:
[ cos ? θ 0 sin ? θ 0 0 1 0 0 ? sin ? θ 0 cos ? θ 0 0 0 0 1 ] ( j y i 1 ) = ( sin ? θ ? i + cos ? θ ? j y cos ? θ ? i ? sin ? θ ? j 1 ) \begin{bmatrix} \cos{\theta} & 0 & \sin{\theta} & 0\\ 0 & 1 & 0 & 0\\ -\sin{\theta} & 0 & \cos{\theta} & 0\\ 0 & 0 & 0 & 1 \end{bmatrix}\\ \begin{pmatrix} j\\y\\i\\1 \end{pmatrix} =\begin{pmatrix} \sin{\theta}*i + \cos{\theta} * j\\y\\\cos{\theta}*i - \sin{\theta} * j\\1 \end{pmatrix} ?cosθ0?sinθ0?0100?sinθ0cosθ0?0001? ? ?jyi1? ?= ?sinθ?i+cosθ?jycosθ?i?sinθ?j1? ?
咱們發現,這里的形式稍微較繞x和繞z不一樣了

本質就是因為這里的正交基分別是: ( 0 0 1 ) \begin{pmatrix} 0\\0\\1 \end{pmatrix} ?001? ? ( 1 0 0 ) \begin{pmatrix} 1\\0\\0 \end{pmatrix} ?100? ?

自然而然可以得出,繞y軸的旋轉矩陣如下:
R y = [ cos ? θ 0 sin ? θ 0 0 1 0 0 ? sin ? θ 0 cos ? θ 0 0 0 0 1 ] R_y = \begin{bmatrix} \cos{\theta} & 0 & \sin{\theta} & 0\\ 0 & 1 & 0 & 0\\ -\sin{\theta} & 0 & \cos{\theta} & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} Ry?= ?cosθ0?sinθ0?0100?sinθ0cosθ0?0001? ?

結尾:喜歡的小伙伴可以點點關注+贊哦

希望對各位小伙伴能夠有所幫助哦,永遠在學習的道路上伴你而行, 我是航火火,火一般的男人!

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

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

相關文章

前端Vue小兔鮮兒電商項目實戰Day02

一、Pinia快速入門 此處見:Vue從入門到實戰Day12-CSDN博客 二、創建項目并精細化配置 1. 創建項目 2. src目錄調整 ①刪除一些初始化的默認文件 清空assets、components、store、views文件夾下的內容; ②修改剩余代碼內容 router/index.js import …

一個程序員的牢獄生涯(44)詢問

星期一 詢 問 在號子里開始了下午坐班的時候,過道內的大鐵柵欄被管教打開,我聽到開鎖的聲音后,心里變得激動起來。盼望著腳步聲能停在我們的號子門口,然后打開鐵門,喊一聲“眼鏡,出來!”。 通道內這次進來的是秦所,但他并沒有在我們號子門口停留,只是在走過的時候,低…

華為昇騰310 ATC模型轉換工具安裝

參考: https://bbs.huaweicloud.com/blogs/393282?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=other&utm_content=content https://www.hiascend.com/document/detail/zh/canncommercial/601/inferapplicationdev/atctool/atctool_0004.html 1、基本工具…

js知識點之閉包

閉包 什么是閉包 閉包,是 JavaScript 中一個非常重要的知識點,也是我們前端面試中較高幾率被問到的知識點之一。 打開《JavaScript 高級程序設計》和《 JavaScript 權威指南》,會發現里面針對閉包的解釋各執一詞,在網絡上搜索關…

Java中如何指定jdk的版本運行jar包

你的jdk安裝的目錄\bin\java -jar 你的jar包名字.jar 這是我的代碼示例 C:\Users\86177\.jdks\corretto-17.0.10\bin\java -jar big_event_study2-0.0.1- SNAPSHOT.jar

23種設計模式之一— — — —裝飾模式詳細介紹與講解

裝飾模式詳細講解 一、定義二、裝飾模式結構核心思想模式角色模式的UML類圖應用場景模式優點模式缺點 實例演示圖示代碼演示運行結果 一、定義 裝飾模式(別名:包裝器) 裝飾模式(Decorator Pattern)是結構型的設計模式…

LeetCode 每日一題 數學篇 2651.計算列車到站時間

給你一個正整數 arrivalTime 表示列車正點到站的時間(單位:小時),另給你一個正整數 delayedTime 表示列車延誤的小時數。 返回列車實際到站的時間。 注意,該問題中的時間采用 24 小時制。 int findDelayedArrivalTi…

學業輔導導師:文心一言智能體詳細介紹和開發

一、前言 本期題目 開發方向:學習成長類 解讀: AI技術在學習成長方向的應用正日益增多,本期賽題需圍繞該方向開發智能體包括但不限于:作文輔導助手、個性化學習助手、考試助手、各垂類教育內容專家等 二、我的智能體:學業輔導…

macbook中foxmail的通訊錄遷移

之前windows中用習慣了foxmail,換成macbook后,還是沿用foxmail。使用一段時間后,確實受不了foxmail的不便:1、版本比較低1.5.6,很多windows新版的功能都沒有;2、動不動莫名其妙崩潰,寫了半天的郵件,點擊發送就直接崩了,又得重新寫。 忍耐了幾個月后,下定決心換成網易…

2.10 mysql設置遠程訪問權限

2.10 mysql設置遠程訪問權限 目錄1. 管理員運行mysql命令窗口2. 使用 root 用戶重新登錄 MySQL3. 修改用戶權限4. 修改mysql安裝目錄下的my.ini 目錄 說明: Mysql8.0 設置遠程訪問權限 一、Mysql8.0 設置遠程訪問權限 1. 管理員運行mysql命令窗口 2. 使用 root 用…

matlab安裝及破解

一、如何下載 軟件下載鏈接,密碼:98ai 本來我想自己生成一個永久百度網盤鏈接的,但是: 等不住了,所以大家就用上面的鏈接吧。 二、下載花絮 百度網盤下載速度比上載速度還慢,我給充了個會員&#xff0c…

【1】:計算機圖形學概述

從技術角度講,什么是好的畫面呢? 看這個畫面是不是足夠亮,也就是全局光照做的夠好 什么是計算機圖形學? 使用計算機合成和操作可視信息。 應用場景 Video Games 游戲 Movie 電影 Animation 動畫 Design 設計:CAD等軟件相關…

修復CentOS 6.6服務器YUM和RPM功能異常的技術實踐20240523

修復CentOS 6.6服務器YUM和RPM功能異常的技術實踐 引言 在復雜的生產環境中,服務器的穩定性至關重要。近期,我們遇到了一臺CentOS 6.6服務器在執行yum update -y時被中斷,導致YUM和RPM功能異常的問題。本文將詳細介紹問題的診斷、解決過程以及…

java中變量名單獨占用一個空間嗎,為什么能直接使用變量名而不需要給java地址,變量名和地址之間有什么關系

在 Java 中,變量名不單獨占用存儲空間,但它們確實在內存中有對應的地址。為了理解這一點,我們需要深入了解變量名和內存地址之間的關系。 變量名與內存地址 變量名的作用: 在 Java 程序中,變量名是用于引用存儲在內存中的數據的…

git顯示提交次數

git shortlog 是一個特殊版本的 git log 命令,旨在創建發布公告。它將每個提交按作者分組,并顯示每個提交消息的第一行。這是一種快速查看不同作者在項目中的貢獻的方式。 以下是 git shortlog 的一些常用參數: -n 或 --numbered&#xff1…

Java多線程——Lambda表達式

λ希臘字母表中排序第十一位的字母,英語名稱為Lambda; 避免匿名內部類定義過多; 其實質屬于函數式編程的概念。 為什么要用Lambda表達式? 1. 避免匿名內部類定義過多; 2. 可以讓你的代碼看起來更簡潔; …

OpenAI 文生圖模型演進:DDPM、IDDPM、ADM、GLIDE、DALL-E 2、DALL-E 3

節前,我們星球組織了一場算法崗技術&面試討論會,邀請了一些互聯網大廠朋友、參加社招和校招面試的同學。 針對算法崗技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何準備、面試常考點分享等熱門話題進行了深入的討論。 合集&#x…

WPF使用Prism實現簡單訂餐系統

新建wpf項目,nuget引入Prism.DryIoc,MaterialDesignThemes 引入后,修改App.xaml 前臺引入 xmlns:prism"http://prismlibrary.com/"和prism:PrismApplication App.xaml.cs App.xaml.cs繼承PrismApplication,重寫CreateS…

在線等!3damx渲染爆內存怎么辦?

在使用V-Ray進行CPU渲染時,復雜場景和高渲染設置可能會導致內存消耗過高,進而影響渲染速度,導致處理異常、機器停滯、應用程序崩潰等情況。 為機器配置更大的 RAM 始終是解決問題的最有效辦法,但如果出于預算等原因無法實現&…

Lua的幾個特殊用法

:/.的區別 詳細可以參考https://zhuanlan.zhihu.com/p/651619116。最重要的不同就是傳遞默認參數self。 通過.調用函數,傳遞self實例 通過 : 調用函數,傳遞self (不需要顯示的傳遞self參數,默認就會傳遞,但…