4次Bezier曲線--計算機圖形學 opengl
計算機圖形學的第一次作業
參考了網上很多程式碼 但好歹寫出來了
#include "GL\glut.h"
#include <math.h>
class Point//一個點類,含有x,y座標
{
public:
intx, y;
voidinit(int x1, int y1) {
x= x1;
y= y1;
}
};
//點的數量
static int PointSum = 0;
//四次的bezier曲線共有五個點
static Point points[5];
void init(void)
{
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,500.0, 0.0, 500.0);
glMatrixMode(GL_MODELVIEW);
}
//畫點
void setPoint(Point p) {
glBegin(GL_POINTS);
glVertex2f(p.x,p.y);
glEnd();
glFlush();
}
// 畫線
void setline(Point p1, Point p2) {
glBegin(GL_LINES);
glVertex2f(p1.x,p1.y);
glVertex2f(p2.x,p2.y);
glEnd();
glFlush();
}
// 計算bezier曲線
Point calculateBezier(Point p0, Point p1,Point p2, Point p3, Point p4, double a) {
Pointp;
doubleb1 = pow((1 - a), 4);
doubleb2 = pow((1 - a), 3) * 4 * a;
doubleb3 = pow((1 - a), 2) * 6 * a * a;
doubleb4 = (1 - a)*a*a*a * 4;
doubleb5 = a * a*a*a;
p.x= b1 * p0.x + b2 * p1.x + b3 * p2.x + b4 * p3.x + b5 * p4.x;
p.y= b1 * p0.y + b2 * p1.y + b3 * p2.y + b4 * p3.y + b5 * p4.y;
returnp;
}
//display函式
void display()
{
glClearColor(0.88,0.71, 0.71, 0); //設背景為粉色
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); //用glClearClolr設定的顏色值清除快取區
glColor3f(0.0,0.0, 0.0);
glPointSize(5);
glFlush();
}
// 滑鼠事件
void MouseFunction(int button, int state,int x, int y) {
if(state == GLUT_DOWN)
{
points[PointSum].init(x,500 - y);
glColor3f(0.86,0.25, 0.0); // 設定點的顏色,繪製點
setPoint(points[PointSum]);
glColor3f(0.12,0.8, 0.25);// 設定線的顏色,繪製線
if(PointSum > 0) setline(points[PointSum - 1], points[PointSum]);
//如果達到了4個繪製bezier曲線,並在之後給計數器清零
if(PointSum == 4) {
glColor3f(0.0,0.0, 0.0); // 設定bezier曲線為黑色
Pointp_current = points[0]; //設為起點
for(double t = 0.0; t <= 1.0; t += 0.05)
{
PointP = calculateBezier(points[0], points[1], points[2], points[3], points[4], t);
setline(p_current,P);
p_current= P;
}
PointSum= 0;
}
else{
PointSum++;
}
}
}
int main(int argc, char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE| GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(0,0);
glutInitWindowSize(500,500); //確定顯示框的大小
glutCreateWindow("ZZJ的圖形學作業1.0");
init();
glutMouseFunc(MouseFunction);// 滑鼠事件
glutDisplayFunc(display);
glutMainLoop();
return0;
}
相關文章
- 計算機圖形學-線性過濾計算機
- 計算機圖形學 第四章 圖形變換計算機
- 貝塞爾曲線(Bezier curve)實現節點連線
- 計算機圖形學之矩陣變換計算機矩陣
- 計算機圖形學入門·光柵化計算機
- 圖形學_opengl紋理對映
- CMU出品,計算機圖形學秋季課程已上線,B站同步字幕影片計算機
- opencv計算曲線長度OpenCV
- 計算機圖形學:虛擬和現實世界的融合計算機
- 橢圓曲線加法原理計算
- 計算機圖形學原理及實踐——C語言描述pdf計算機C語言
- 計算機小白大資料學習線路圖計算機大資料
- ROC曲線繪製與AUC計算
- Android日常學習:OpenGL 實踐之貝塞爾曲線繪製Android
- 計算機網路與協議學習路線圖計算機網路協議
- sk-learn 學習曲線圖
- Qt QPolarChart極座標圖(阿基米德線、四葉曲線、六葉花瓣、三葉花瓣、心形曲線)QT
- 機器學習之學習曲線機器學習
- 大學計算機必修課新講--編譯原理+作業系統+圖形學計算機編譯原理作業系統
- 《計算機圖形學原理及實踐》學習筆記之第十一章計算機筆記
- 計算機圖形:三維觀察之投影變換計算機
- 一個碼農是如何用遊戲推動計算機圖形學的?遊戲計算機
- java3D與計算機圖形學期末複習 第二章Java3D計算機
- 【Notes_8】現代圖形學入門——幾何(基本表示方法、曲線與曲面)
- Android OpenGL ES 開發(二):繪製圖形Android
- 當計算機圖形學遇上深度學習,針對3D影像的TensorFlow Graphics面世計算機深度學習3D
- 計算機圖形學(CG技術)在日本動畫製作中的應用計算機動畫
- 基於python win32setpixel api 實現計算機圖形學相關操作PythonWin32API計算機
- OpenGL光照計算中法線矩陣原理及推到過程矩陣
- delphi 畫圖表,曲線圖
- 你知道嗎, CoreGraphics繪圖系統和Bezier貝塞爾曲線座標系的順時針方向是相反的!繪圖
- P-III曲線水文頻率計算程式(方法)
- OpenGL 學習 04 圖元
- 隨機森林n_estimators 學習曲線隨機森林
- flutter 自定義view 繪製曲線統計圖FlutterView
- OpenGL 學習系列---基本形狀的繪製
- canva畫曲線圖效果
- 科學計算:Python 分析資料找問題,並圖形化Python