作業4 B zier 曲線

2021-10-04 09:18:10 字數 2114 閱讀 8874

一、功能

實現de casteljau 演算法來繪製由4 個控制點表示的bézier 曲線(當你正確實現該演算法時,你可以支援繪製由更多點來控制的bézier 曲線)。實現對bézier 曲線的反走樣。

函式功能:

• recursive_bezier():實現de casteljau 演算法計算貝塞爾曲線上對應點的座標 ,輸入的是乙個控制點序列和乙個浮點數t。注意這個只能找到乙個點,要找到若干個點,就需要若干個t 。

• bezier():該函式實現繪製bézier 曲線的功能。輸入引數是控制點序列和mat物件,繪製貝塞爾曲線,迭代t並將t作為引數傳入 recursive_bezier()函式,返回點,畫在mat物件上。

二、演算法

de casteljau 演算法說明如下:

1. 考慮乙個p0, p1, ... pn 為控制點序列的bézier 曲線。首先,將相鄰的點連線起來以形成線段。

2. 用t : (1 − t) 的比例細分每個線段,並找到該分割點。

3. 得到的分割點作為新的控制點序列,新序列的長度會減少一。

4. 如果序列只包含乙個點,則返回該點並終止。否則,使用新的控制點序列並轉到步驟1。

使用[0,1] 中的多個不同的t 來執行上述演算法,得到相應的bézier 曲線。

實現反走樣:對於乙個曲線上的點,不只把它對應於乙個畫素,你需要根據到畫素中心的距離來考慮與它相鄰的畫素的顏色。

三、程式

#include #include #include #include #include std::vectorcontrol_points;       //控制點 

//event是cv_event_* 變數之一,x和y是滑鼠指標在影象座標系的座標(不是視窗座標系),flags是cv_event_flag的組合,userdata是使用者定義的傳遞到setmousecallback函式呼叫的引數

void mouse_handler(int event, int x, int y, int flags, void *userdata)

}void *****_bezier(const std::vector&points, cv::mat &window)

}//實現de casteljau 演算法計算貝塞爾曲線上對應點的座標 ,輸入的是乙個控制點序列和乙個浮點數t

//注意這個只能找到乙個點,要找到若干個點,就需要若干個t

cv::point2f recursive_bezier(const std::vector&control_points, float t)

// }

// return control_points[0];

//遞迴方法

int n = control_points.size(); //計算控制點序列中點的個數

if(n == 1) //遞迴出口

return control_points[0];

std::vectornew_control_points;

for(int i = 0; i < n - 1 ; i++) //每次對控制點序列進行迴圈

return recursive_bezier(new_control_points,t); //遞迴呼叫

}

//輸入控制點序列和mat物件,繪製貝塞爾曲線,迭代t並將t作為引數傳入 recursive_bezier()函式,返回點,畫在mat物件上

void bezier(const std::vector&control_points, cv::mat &window) }

int main()

, 3);

}if (control_points.size() == 4) // 當控制點的個數為4時

cv::imshow("bezier curve", window);

key = cv::waitkey(20); //等待20ms

}return 0;

}

四、注意

window.at(point.y, point.x)[1] = 255;
這裡point.y和point.x不要寫反了。

學生作業4

a11 rights reserved.作 者 b09 完成日期 2014年10月15日 版 本 號 v1.0 問題描述 輸出三角形型別 using system using system.collections.generic using system.linq using system.text...

個人作業4

我選擇的是第二個任務,為休閒和健康 專案編寫乙個分專案章程。健康與休閒 專案章程 授權日期 6月1日 專案開始日期 6月1日專案結束日期 12月1日 關鍵日程里程碑 預算 該專案預算為20萬美元,可根據需要增資。專案的主要成本為內部人工費用。所有硬體從外部採購。專案經理 高xx,132 x8993,...

課程作業4

ooa object oriented analysis,物件導向分析 從客觀存在的事務和事務之間的關係,歸納出有關物件 包括物件的屬性和行為 以及物件之間的聯絡,並將具有相同屬性和行為的物件用乙個類 class 來表示。建立乙個能夠反映真實情況的需求模型。ood object oriented d...