KSEG輔助文件

此文件是根據 Xu Xianghua 提供的簡體中文版,配合原始英文版修改而來的。

快速連結:

開始/簡短攻略
介紹
點選
作圖
轉換
測量和計算
編輯和重約束
檢視及圖像輸出
作圖器

開始/簡短攻略

跟著下面的步驟做,你馬上就能夠熟悉KSEG最基本的使用方法,就能隨心所欲操作它了。如果想學習進階功能,就要把整篇文檔都讀完。
  1. 首先啟動KSEG。你可以在作圖視窗看到一張展開的畫布(它周遭有工具列,捲軸,功能選單和狀態列)。
  2. 在畫布中央右擊鼠標,建立點A。
  3. 按住SHIFT鍵,再一次於畫布的空白區域上右擊鼠標,建立點B。按住SHIFT鍵的目的是不讓點A取消點選狀態,此時畫布上有兩個被點選的點。
  4. 在功能選單中點擊"新增/用圓心和點畫圓",建立一個以點A為圓心,經過點B的圓。此時圓顯示為點選狀態而點A和B取消了點選狀態。
  5. 在點B上左擊鼠標,以點選點B(同時圓取消了點選狀態)。按住SHIFT鍵點擊點A將其點選。
  6. 再次點擊功能選單"新增/用圓心和點畫圓"。這次建立了一個以點B為圓心(因為先選擇了點B),經過點A的圓。
  7. 按住SHIFT,點選第一個圓。這時候有兩個被點選的圓。
  8. 點擊功能選單"新增/交點"。在兩個圓的交點處出現了兩個點,都處於點選狀態。
  9. 點擊功能選單"新增/直線"。建立了點A和B的垂直平分線。
  10. 現下用鼠標左鍵拖曳點A。哈,現在你知道KSEG可以用來做什麼了吧。
這當然不是KSEG中建立垂直平分線最有效率的方法(這是尺規作圖的方法),只是展示一下如何建立及選擇元件。

回到頂端

介紹

KSEG讓你可以輕鬆地展示尺規作圖的動態特性,並且使得幾何探索盡可能地便捷和簡單。每一次我坐下來玩KSEG,我幾乎都會發現一個以前不知道的幾何特性。

使用KSEG,你可以建立動態作圖: 首先在畫布上放置一些點,用這些點作出其它元件,如線和圓。然後你可以拖曳這些點,觀察整個的圖是如何變化的。當然KSEG還有更多的功能,但這是基本的想法。我還經常用它產生LaTeX中使用的高品質幾何作圖。我發現最簡單的方法(用在LaTeX中)是: 在KSEG中作好圖,儲存成 .ps 文件,然後轉換為 EPS 格式,在 XFIG 中寫註解,再輸出為 PS/LaTeX 格式。

術語問題: 我使用詞語"Construction(作圖)"指KSEG中使用的一種類似巨集(macro-like) 檔案類型,也用它表示一組相互依賴的幾何元件。通常透過上下文能瞭解我在說什麼,但在本文檔中我 使用大寫首字母的"Construction"表示檔案類型,而用小寫的"construction"表示一組幾何元件。("Constructions"可以看成是作圖程式,給定一些輸入元件,它就會自動地作圖,得到最終的圖形,也可以看成是個作圖機器,因此下面被翻譯為"作圖器"。而"construction"就翻譯為"作圖"。"play"的意思用作圖器自動作圖,因此翻譯為"自動作圖")

幾何元件(Geometric Objects)

點,線,測量,計算,軌跡等都是幾何元件。一個幾何元件可能有其所倚賴的"父"幾何元件。例如你建立了兩個點,又透過這兩點建立了一條直線,那麼這兩個點就是這條直線的"父元件",直線是這兩個點的"子元件"。當你拖曳一個自由(無父母)的點時,它的所有後代都需要重新計算。當你拖曳一個有"父母"的元件(這稱作逆向拖曳)時,KSEG透過一個複雜的算法確定需要移動哪些父元件,如何移動,使得你能夠移動拖曳的元件。

幾何元件可能"不存在"於真實的幾何中,如不相交兩圓的"交點"。如果圓移動後變得更接近時,就真正存在這些交點了。不存在元件的子元件也是不存在的(軌跡是個例外,詳情見本文檔軌跡部分)。因此在你拖曳一個點過程中,可能一下子你作的圖就不見了,因為兩條線段不再相交了(消失的元件都是交點的後代),不必擔心,當兩條線段再次相交時一切都回來了。



回到頂端

點選(Selecting)

為了建立新元件,通常要先點選既有的元件。下面是一些點選方法: 當你點擊的點上有多個元件時,事情就複雜些了(換句話說,對於KSEG,你要使用非常直觀的方式觀察)。元件有不同的點選優先等級: 首先是點,曲線,文字,軌跡其次,填充的元件最後。如果鼠標點的地方同時有不同優先級的元件,只會點選最高等級的元件,而忽略其它的元件。對於同一優先等級的多個元件,算法則是: 在所有點選的可能性中進行循環。在你點擊鼠標時可以透過觀察狀態列的顯示結果,以確定點選了那一個元件。

選擇群組(Selection Groups)

點選多個元件的更有效的方法是使用群組。點選群組是一組元件,當你告訴KSEG這些元件是一組時,就可以更輕鬆地進行點選操作。點擊功能選單"編輯/選擇群組(Edit/Selection Groups)",打開選擇群組的管理窗口,會顯示出一個列表框,其中包括所有的內建點選群組和你打開的檔案中的點選群組。內建選擇群組是以星號標記,每種類型的元件有一個選擇群組,組合了該類型的所有元件。

當你在選擇群組管理器的列表框中選擇一個(或多個)選擇群組,並點擊選擇(Select)按鈕,該組的所有元件都會被點選,而不會點選其它類型的元件。按住 SHIFT 鍵並點擊選擇(Select)按鈕,該組的元件被點選,其它類型的元件維持原來的選擇狀態。點擊取消選擇(Deselect)按鈕會取消該組元件的選擇。當有至少一個元件被點選時,就可以點選新增群組(New Group)按鈕,點擊它會建立一個包括所選元件的群組。內建群組不能被刪除。

"影響隱藏元件(Affect Invisible Items)" 選取方塊只會影響內建群組。當其未被勾選(預設狀態)時,"所有 點 Points"就是指所有非隱藏點;勾選時,"所有 點 Points "就包括隱藏點。非內建群組會選取或不選取群組裡的所有元件,包括隱藏的元件。

非內建群組裡的所有元件被刪除後,就會變成空的群組(直接刪除或透過undo)。這樣的群組會以'-'標記,但不會被自動刪除(因為透過undo/redo可能會讓該組所有元件復活)。空群組不會被儲存到檔案中。



回到頂端

作圖(Constructing)

當新元件被建立的時候,他們會自動變成選取狀態,其它元件會被取消點選狀態,例外是按住 SHIFT 鍵右擊鼠標建立點 Points 時。

點(Points)

還有兩種類型的點是端點(endpoints)和圓心(center points)。這在作圖器中非常有用,你可能有一條線段但沒有端點,或者一個圓沒有圓心。要想給線段,射線,弧建立端點,點擊功能選單"新增/端點(New/Endpoint(s))"。要給圓或弧線建立圓心,點擊功能選單"新增/圓心(New/Center Point)"。

線段(Segments)

畫線段的唯一方法,就是點選兩個或更多的點,然後點擊功能選單"新增/線段(New/Segment(s))"。如果有兩個點被點選,就只會建立一條線段。如果 n > 2 個點被點選,將會建立 n 條線段。

射線(Rays)

直線(Lines)

圓(Circles)

圓弧(Arcs)

圓弧只能用三個點建立,要先選擇三個點,然後點擊功能選單"新增/用三點畫弧(New/Arc By Three Points)"。

軌跡(Loci)

軌跡是一種幾何元件,就是當一個點("驅動元件(driver)")在一條曲線上移動時,另外一個幾何元件("被動元件(driven object)")的移動路徑。要建立一個軌跡,選擇曲線上的一個點(約束於該曲線上的點),再選擇一個它的後代元件,點擊功能選單"新增/軌跡(New/Locus)"。被動元件可以是一個點,曲線,甚至是另一個軌跡(但這會跑得很慢)。即使被動元件不存在,也可能有軌跡,因為當驅動器移動到另外的位置時,被動元件就存在了。

舉例來說,設L是一直線,A是直線L上一點,B是直線外一點,K通過AAB的垂線。那麼如果K是被動元件而A是驅動器,則K的移動軌跡的外緣就是以B為焦點,與L相切的拋物線。

因為軌跡是幾何元件的無限集合,KSEG無法精確計算。事實上是利用取樣的方法做近似。你可以改變KSEG計算的樣本數,例如在軌跡上雙擊鼠標,或者選擇軌跡,點擊功能選單"編輯/更改樣本數(Edit/Change Number Of Samples...)"。例外的情況是,當被動元件是點的時候,KSEG會自動將樣本點連接起來,並用適應演算法快速地將軌跡變得光滑和準確。這種情況下你所指定的樣本數只是一個上限,當演算法認為軌跡已經足夠好的時候會自動停止計算樣本。這種演算法產生的軌跡看起來比與KSEG類似的程式產生的軌跡好得多。

填充元件(Filled Objects)

回到頂端

轉換(Transforms)

KSEG能對幾何元件作仿射轉換。通常的做法是先"選取"元件,點擊功能選單"轉換/選擇*(Transform/Choose *)" 進行轉換。試試,點選想轉換的元件,在功能選單中選擇你想作的轉換,轉換後的複製品就出現了。下面是 詳細內容:

選取: 目前選擇轉換的元件都會被標記為黃色,讓你知道將進行什麼轉換。如果你已經執行了轉換,但想去掉黃色標記 (為了美感或是顯示問題--標記不會被列印的),點擊"轉換/清除選擇(Transform/Clear Chosen)"。 能夠用選定的測量或計算值進行轉換,讓你能輕鬆地建立尺規作圖難以完成的圖形。你可能要小心地 使用這個技巧,但它也可能很有趣的--例如 coord.seg 展示了如何用KSEG畫出像軌跡那樣的參數曲線。

回到頂端

測量和計算(Measuring and Calculating)

在KSEG中可以測量多種幾何量,並利用測量進行計算。所有距離的單位都是像素,角的單位是度。你可以測量的有: 可以把幾個測量結果組合到一個計算中。點擊功能選單"測量/計算...(Measure/Calculate...)"或雙擊既有的測量值,就會建立一個計算。如果點選了測量和計算,功能選單選項會打開與選擇相關的計算,而如果沒有選擇,就打開一個空的計算。雙擊方法會打開與你雙擊元件相關的計算。在任何一種情況下,你都可以在計算的編輯窗口中輸入公式。如果雙擊已有的計算,會打開一個計算編輯視窗,讓你編輯這個計算。

計算編輯器的復原堆疊與KSEG主視窗的復原堆疊是完全獨立的,當計算編輯器視窗關閉後,復原堆疊就會消失。

在計算編輯器中,你可以輸入數字,常用算術運算符號,可以在工具列中選擇求方根,指數,分數(或使用快捷鍵CTRL+2,CTRL+6,CTRL+/)。你還可以用下面的函數:

sqrt,log,exp,floor,ceil,fabs,sin,cos,tan,sinh,cosh,tanh,asin,acos,atan,asinh,acosh,atanh

請注意上面這些函數用的是弧度,而不是測量和轉換中使用的角度。我知道這很差勁,但解決的唯一途徑是增加單位支援的修正。

最後,當計算編輯器打開時,你還可以引用其它的測量或計算,只需要在它們上面雙擊。但是你不可以引用,引用了你正在編輯的那個計算的計算值。

我必須說的是,這部分是我最不喜歡的。沒有基本的單位支持,計算也很土。而且公式的代碼很醜陋,很遲鈍(還可能有bug)。



回到頂端

編輯/重約束(Editing and Reconstraining)

修改顯示和標籤(Appearance Modification and Labels)

你可以透過"編輯/顏色(Edit/Color)","編輯/線型(Edit/Linestyle)","編輯/點型(Edit/Pointstyle)",和"編輯/字型(Edit/Font)"自訂你所點選的元件的外觀。如果不選擇元件而進行修改,將會影響預設的設定。顏色,字體等設置都不在工具列中,但你可以點擊相關功能選單最頂部的虛線,將功能選單拉出來,作為工具列使用。

點和各種曲線都有標籤,但預設不顯示。你可以選擇元件,點擊"編輯/顯示標籤(Edit/Show Label(s))"使它的標籤顯示。點選元件點擊"編輯/更改標籤(Edit/Change Label)",或者在標籤上雙擊,就能夠修改標籤。還能在標籤中使用下標和上標,及其它的東東,如果你能夠找出來的話。(CTRL+2 輸入根號,CTRL+3 矩陣,CTRL+4 積分符號,CTRL+5 求和符號,CTRL+6 上標,CTRL+8 連乘符號,CTRL+- 下標...) 你還可以對應於它參考的元件拖曳移動標籤。

重約束(Reconstraining)

沒有什麼比花了半小時費心地作了個圖,卻發現開始的時候就犯了個小錯誤更討厭的了。KSEG的重約束機製能讓你輕鬆地修正它。要重新約束一個點,可以按住 CTRL 鍵,用左鍵拖曳該點,移動到想被約束的元件上,釋放鼠標,它就被約束到那個元件上了。(就是把原來的"父母"元件換成另外的元件)

例如,假設你建立了一個三角形ABC,經過一番操作還沒有找到它的中心,於是決定研究一下當ABC等腰時的特點。為了使AB=BC,以B為圓心畫過A的圓。然後按住 CTRL 鍵,將C點拖動到圓上,釋放鼠標后,點C就被約束到圓上了(以圓為"父"了),三角形也變成了等腰的了。如果想讓三角形ABC再次變成任意的,按住 CTRL 鍵,將點C拖動到空白處釋放鼠標就好了(C就變成"孤兒"了)。

因此: 所有的這些動作顯然可以透過 CTRL+Z("編輯/復原(Edit/Undo)")復原。狀態列會盡力告訴你當你拖曳點的時候發生了什麼事情。

有時候KSEG可能不讓你作你想要的重約束。這是有原因(當然也不排除是bug)的,你不能將點重約束到它的後代上去(不能搞錯輩分!)。如果重約束一個點時,會破壞一個軌跡上的被動點對其驅動器的倚賴關系,你也不能重約束它(你同樣不能重約束軌跡的驅動器點)。還有,在作圖器中有複雜的規則確保重約束不會擾亂作圖器。例如,你不能重約束一個"給定"點到一個"最終"曲線。如果你發現KSEG允許你重約束,卻把作圖器弄錯了,請告訴我。

回到頂端

檢視和圖像輸出(Views and Image Exporting)

檢視平移和縮放(View Panning and Zooming)

為了能更容易地觀察你的圖,KSEG能夠縮放或者移動圖。縮放,點擊"檢視/縮放(View/Zoom)"。鼠標的游標將變成放大鏡的形狀(在草圖區域)。按下鼠標左鍵並上下拖動,將放大或縮小圖形。縮放是以鼠標所在的點為中心的。釋放鼠標后,游標恢複原狀。目前的放大率會一直在狀態列上顯示。但是不管什麼樣的放大率,點大小,線的粗細和字體大小都不會變化。平移的做法和縮放一樣--點擊"檢視/平移(View/Pan)",按下鼠標左鍵並拖動。或者,不用點擊功能選單,按下鼠標中鍵(如果你有的話)就可以拖曳平移。

如果點擊"檢視/最適檢視大小(View/Zoom To Fit)",KSEG會自動平移和縮放,使圖恰好填滿視窗。如果點擊"檢視/原始檢視大小(100%)",KSEG會將放大率設置為100%,並將圖形平移到初始位置。

多重檢視(Multiple Views)

點擊"檢視/新增檢視"可以為當前檔案建立另一個檢視(在另外的視窗中)。在一個檢視中平移和縮放不會影響到其它的檢視,但是修改檔案或選擇元件會反應到本文檔的其它檢視中。所以你在一個視圖中拖曳一個點,你能看到其它的檢視都有反應。檢視的用處是,例如可以在一個檢視中對付草圖的一小部分(或者在一個放大的檢視中作出完美的動作),而同時在另外的檢視中觀察整個草圖的反應。

輸出圖像(Image Exporting)

可以把當前檢視中的內容輸出到圖形文件中(包括常用的幾種格式)。只需點擊"文件/輸出為圖像(File/Export To Tmage...)"。然後就會出現一個對話框讓你選擇文件格式及是否使用高品質格式。點擊確定後在彈出的對話框中輸入檔案名稱再確定就好了。圖像的大小和檢視的大小是一樣的。

如果選擇了"高品質圖像",KSEG需要更長的時間輸出,但圖像會被反鋸齒化(antialiased)並以亞像素的分辨率繪製。該選項對製造網路圖片非常有用,但是打印出來卻很糟糕(比低質量的更差勁)。而且,當輸出黑白圖片時,千萬不要用高品質的設置(但是灰階圖卻很好)--非常糟糕。使用低質量模式比較保險,因為圖形在螢幕上是什麼樣,輸出的圖像就什麼樣。

回到頂端

作圖器(Constructions)

作圖器(Constructions)大概是KSEG的最強大的特性了。一個作圖器(Construction) 就像一個普通的KSEG草圖,不同的是它可以自動製作另外一個KSEG草圖(或作圖器(Construction))。首先看一個簡單的例子:

外接圓範例攻略(Circumcircle Example Walkthrough)

這部分將帶你一步一步製作範例 circumcircle.sec。在這個過程中,我會解釋每一步的涵義。這個作圖器(Constructions)會繪製一個通過三個給定點的圓。
  1. 新增作圖器(Constructions): "檔案/新增作圖(File/New Construction)"。
  2. 建立三個點A,B,C。這三個點將作為 Construction 中給定的點。
  3. 選擇A,B,C,點擊"作圖器/設為給定(Construction/Make Given)",將它們設為"給定"。這是告訴KSEG這三個點在自動作圖時是給定的。
  4. 建立線段 AB,BC及它們的中點 D,E。
  5. 過D作AB的垂線,過E作BC的垂線。建立它們的交點F。這是三角形ABC的外接圓圓心。
  6. 現下作以F為中心過A的圓,這就是所求的外接圓。
  7. 點選除了外接圓及三個給定點外的元件,點擊"編輯/隱藏元件(Edit/Hide Objects)"將它們隱藏。這麼做的目的是在自動作圖的過程中,我們不想看到過程中間生成的元件出現,我們只想要外接圓。
  8. 大功告成! 建立一個新的草圖(點擊"文件/新增草圖(File/New Sketch)")來測試這個作圖器吧。在新草圖中建立三個點,點選它們後點擊"自動作圖/未命名"(假設你沒有保存剛才的作圖器)。一個外接圓立刻就出現了!

非遞廻作圖器(Non-Recursive Constructions)

作圖器的大部分功能來自於遞廻。非遞廻的作圖器非常簡單--上面外接圓的例子涵蓋差不多所有的功能了。下面還有些細節(對遞廻作圖器同樣適用)

遞廻作圖器(Recursive Constructions)

作圖器最酷的用法就是遞廻了。這個功能可以建立出碎形圖,也可以重複多次地自動作圖。舉個簡單的例子,看看 tractix.sec (用一段短線段和30左右的遞廻次數)。複雜的例子(多個遞廻分支)見 dragn.sec,建立了一個碎形。

當你插入了循環"元件"到作圖器中,它就變成了遞廻作圖器(循環元件不是真正的幾何元件,只假裝它們是而已)。插入循環的方法是: 選擇幾個對應到給定元件的元件,點擊功能選單"作圖器/循環(Construction/Recurse)"。循環會告訴KSEG,當作圖器中的其它步驟完成時,對這幾個元件進行重複前面的作圖命令。當然KSEG不會永遠循環下去--當你用遞廻作圖器自動作圖時,KSEG會問你最大循環次數。要小心--如果你的循環次數大於1,KSEG建立的元件數量是循環次數的指數倍,換句話說,循環次數盡量小一些。在我的老350mhz電腦上,KSEG大概能輕鬆得處理100000個元件--我想這足夠應付任何情況了。

要記住一旦你在作圖器中插入了循環,給定元件就不能再被修改了(不能標記新的給定元件,不能將已設定的給定元件設為普通,刪除一個給定元件就會刪除所有的循環,等等)。這麼做是為了防止循環無效。想改變給定元件,要先刪除循環。

在遞廻作圖器中還可以將元件設為"完成(Final)"或"初始(Initial)"。完成元件顧名思義是在循環到最後一層時才建立。這在很多情況下都有用,特別是在分形圖中只顯示最高級的細節的時候--看 dragon.sec 和 sierp.sec。完成元件的子元件也是在循環的最後一層才建立的 -- 它們在作圖動作列表中被標記為"完成(Final)"。

初始元件要複雜些--它是一個"高級"功能。它並不是非常強大,但它有一些奇特的效果,有時候很難搞懂。初始元件只建立一次(在頂級循環中,即第一次)。"父"元件都是初始元件(或隱式的初始元件)時,它就是隱式初始元件,在作圖動作列表中被標記為"初始"。為更好地理解,看一些例子 sierp.sec: 先正常地自動作圖(注意看三角形的最長邊只建立了一次),任何在初始線段 s_9 上作一個點 P,作線段 PC(從點 P 到給定點 C)。再次自動作圖並觀察效果。初始元件的使用可以節省記憶體(例如 koch.sec),也可以用它們作出特別的效果。

在遞廻作圖器中,當處理 完成/給定/初始 元件時,KSEG盡量避免錯誤或無用的設定,例如初始或給定元件有"父"元件是 完成 的。可能這麼做看上去沒什麼,但通常它都是正確的(如果你發現了例外,請email我,將正確的作圖器和錯誤動作的描述告訴我)。

前面提到,作圖器就是一個作圖程式,而給定元件就相當於這個程式的輸入參數。因此用作圖器自動作圖時,要現選定給定元件,所選擇的元件要和作圖器的給定元件(輸入參數)相對應,而且其順序也會影響作圖。在遞廻作圖器中,循環就類似於其它程式語言中的函數的遞廻,將作圖器中的作圖指令(作圖函數)重複調用,不過函數的參數不是給定元件了,而是其它的元件(因此在設置循環時,選擇的元件也要與給定元件相對應)。



回到頂端

Ilya Baran
ibaran@mit.edu
http://www.mit.edu/~ibaran/

---------------------------------------
繁體中文版 by Yao Chang-Li cctg blog cctg mirror blog