文章/消息‎ > ‎

永遠垂直、以像素為單位的向量?

張貼者:2010年6月20日 上午9:31羅驥韡   [ 羅驥韡 已於 2011年5月27日 下午11:54 更新 ]
在 GeoGebra 中,我們隨時可以改變 x 軸或 y 軸的刻度比例,或縮放整個座標平面,但一般的幾何圖形或嵌入的圖片也會因此而縮放,甚至變形。

例如右圖,在圖中右邊的四邊形,其實是個正方形,但因為我們事先已經改變了 x 軸與 y 軸的刻度比例,以至於長寬比並非 1:1,所以讓正方形看起來不像是個正方形。

我們有沒有辦法讓某個長方形(或圖片)隨時保持其原來在螢幕上的大小與垂直角,就算我們改變座標軸的長寬比也一樣?答案是可以的,你可以試著利用「Shift + 滑鼠左鍵」來拖曳 x 軸或 y 軸,這時你會發現:雖然圖中的正方形始終像個平行四邊形,而且大小、角度都會改變,但圖中的兩個向量卻始終垂直,在螢幕上所具有的長度亦不會忽長忽短,這到底是怎麼辦到的呢?以下是我們的作法:

  1. 我們先將一個以座標為單位的向量 u,轉變為以像素為單位的向量 v
    v = Vector[
      {
        {x(Corner[5])/x(Corner[3]-Corner[1]),0},
        {0,y(Corner[5])/y(Corner[3]-Corner[1])}
      }*u
    ]


  2. 再來,我們將 v 變為寬度為 width 像素的向量 w
    wwidth*UnitVector[v]

  3. 最後,我們將以像素為單位的 w 換為以座標為單位的 z
    zVector[
      {
        {x(Corner[3]-Corner[1])/x(Corner[5]),0},
        {0,y(Corner[3]-Corner[1])/y(Corner[5])}
      }*w
    ]


    這時向量 z 的長度在螢幕上看起來就是固定的(為 width 像素)!
在上面的步驟 2 中,只要我們將 width*UnitVector[v] 改為 width*UnitPerpendicularVector[v],其他步驟完全一模一樣,就可以幫 z 作一個在螢幕上看起來始終垂直的向量了。

事實上,在 GeoGebra 中,指令並不能分段寫(如果你要作成一個「新工具」的話),我們上面的步驟 1, 2, 3 只是為了說明方便,因此實際上的指令長這樣(請勿驚慌):

指令

z=Vector
  {
    {x(Corner[3]-Corner[1])/x(Corner[5]),0},
    {0,y(Corner[3]-Corner[1])/y(Corner[5])}
  }*(
    width*
    
UnitVector[
      Vector[
        {
          {x(Corner[5])/x(Corner[3]-Corner[1]),0},
          {0,y(Corner[5])/y(Corner[3]-Corner[1])}
        }*u
       ]
    ]
  )
]


請點下圖,到 GeoGebraTube 中看看實際的樣子:


ċ
PixelsSystem.ggb
(6k)
羅驥韡,
2010年6月20日 上午9:32
Comments