MFC上如何繪製乙個可以旋轉的橢圓

2021-06-18 08:48:07 字數 1021 閱讀 4845

問題描述:windows下,gdi可以呼叫ellipse直接繪製乙個水平或垂直方向的橢圓,但是無法按照一定的角度自由旋轉。

解決方法:

1. 使用世界座標系。通過旋轉世界座標系,達到旋轉橢圓的目的。需要使用到setworldtransform等一系列的函式。

關於這些函式的使用方法參見如下資料:

簡單介紹一下旋轉橢圓時,如何計算世界座標系的轉換。

橢圓的中心點(x0,y0),從點(x1,y1)旋轉到點(x2,y2),旋轉角度為q(單位為弧度)。

x2 = cos(q)*(x1-x0) – sin(q)*(y1-y0) + x0;

y2 = sin(q)*(x1-x0) + cos(q)*(y1-y0) + y0;

當使用世界座標系時,從點(x,y)變換到點(x', y')時,setworldtransform需要乙個xform的引數,其成員的計算關係為:

x』 = x * em11 + y * em12 + edx;

y』 = x * em12 + y * em22 + edy;

因此可以得出:

xform.em11 = cos(q);

xform.em12 = sin(q);

xform.em21 = -sin(q);

xform.em22 = cos(q);

xform.edx = x0 – cos(q) * x0 + sin(q) * y0;

xform.edy = y0 – cos(q) * y0 - sin(q) * x0;

參考資料:

此外,gdi+把上面的一系列世界座標系的函式封裝到了graphics類裡了(標頭檔案為gdiplusgraphics.h)。

方法缺陷:win95/98不支援世界座標系,有平台限制。

2. 使用4條貝賽爾曲線來模擬繪製橢圓,而貝塞爾曲線是可以旋轉的。

從乙個水平或垂直方向的橢圓(未旋轉的)的外接邊界矩形,計算出13個控制點(0-12)用以控制4條貝塞爾曲線。

下面的計算方法是以y軸向下為標準的。

參考資料:

如何利用Python繪製乙個愛心

剛學習python幾周,閒來無事,突然想嘗試畫乙個愛心,步驟如下 開啟介面 開啟python shell介面,具體是python語言的idle軟體指令碼。2.建立指令碼 單擊左上角 file 再單擊 new file 建立乙個新的指令碼檔案。3.如下 1 from turtle import 2de...

MFC如何判斷乙個程序已經存在

通俗的講,createmutex就是用來判定是否存在乙個指定的程序。呵呵,這樣就很好理解了。mfc 判斷乙個指定的程序是否存在 createmutex createmutex 說明 建立乙個互斥體 mutex 返回值 long,如執行成功,就返回互斥體物件的控制代碼 零表示出錯。會設定getlast...

如何繪製乙個圓的不同方法技巧

之前和大家分享了很多不同的cad製圖技 巧,這對於我們日常的製圖工作很有幫助。若是乙個cad製圖初學的小夥伴,該如何簡單繪製乙個圓呢?今天就和初學cad製圖的小夥伴們分享一下,如何繪製乙個圓的不同方法技 巧。具體演示如下 方法一 cad編輯器標準版 我們啟動執行cad編輯器標準版,先在命令框中輸入繪...