贝塞尔曲线.zip

  • 周晬
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 2
    下载次数
  • 2020-06-18 18:47
    上传日期
演示贝塞尔曲线的形成过程,鼠标点击可移动关键点
贝塞尔曲线.zip
  • 贝塞尔曲线
  • 1.cpp
    3.6KB
  • 第七次实验1.sln
    1.4KB
内容介绍
#include <GL/glut.h> #include <math.h> const int WindowHeight = 600, WindowWidth = 600; const int point = 8; GLfloat startVertices[point][2] = { {0.0,0.0}, {0.5,0.5}, {-0.5,0.5},{0.8,0.8},{-0.9,-0.9 } ,{0.9,-1.0},{1.0,1.0},{0.7,0.7} }; GLfloat lineColor[] [3]= { {0.0,0.0,0.0}}; bool selecting = false; int verticeSelected = 0; bool playAnim = true; int t = 0; const int framesPerAnim = 10000; GLfloat trace[framesPerAnim + 10][2]; void DrawBezierCurve(GLfloat vertices[][2], int verticesNum, int colorOrder = 0) { glColor3fv(lineColor[0]); glBegin(GL_LINE_STRIP); for (int i = 0; i < verticesNum; i++) { glVertex2f(vertices[i][0], vertices[i][1]); } glEnd(); GLfloat(*nextVertice)[2] = new GLfloat[verticesNum][2]; for (int i = 0; i < verticesNum - 1; i++) { nextVertice[i][0] = vertices[i][0] + (t / (float)framesPerAnim) * (vertices[i + 1][0] - vertices[i][0]); nextVertice[i][1] = vertices[i][1] + (t / (float)framesPerAnim) * (vertices[i + 1][1] - vertices[i][1]); } if (verticesNum - 1 == 1) { trace[t][0] = nextVertice[0][0]; trace[t][1] = nextVertice[0][1]; glColor3f(1.0, 0.0, 0.0); glBegin(GL_LINES); for (int i = 1; i < t; i++) { glVertex2f(trace[i - 1][0], trace[i - 1][1]); glVertex2f(trace[i][0], trace[i][1]); } glEnd(); } else DrawBezierCurve(nextVertice, verticesNum - 1, colorOrder); delete[]nextVertice; } void Mouse(float &x, float &y) { int viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); x = -1 + 2 * (x / (float)viewport[2]); y = 1 - 2 * (y / (float)viewport[3]); } void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glColor3f(0.0, 0.0, 1.0); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); if (playAnim) DrawBezierCurve(startVertices, point); else { glColor3fv(lineColor[1]); glBegin(GL_LINE_STRIP); for (int i = 0; i < point; i++) { glVertex2f(startVertices[i][0], startVertices[i][1]); } glEnd(); } glFlush(); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void idlefunc() { if (playAnim) { t += 1; if (t >= framesPerAnim) t -= framesPerAnim; glutPostRedisplay(); } else t = 0; } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: playAnim = false; break; } } void mouse(int key, int state, int x, int y) { float mouseX = x; float mouseY = y; Mouse(mouseX, mouseY); if (key == GLUT_LEFT_BUTTON) { if (state == GLUT_DOWN) { for (int i = 0; i < point; i++) { if (sqrtf(pow(startVertices[i][0] - mouseX, 2) + pow(startVertices[i][1] - mouseY, 2)) <= 0.05) { verticeSelected = i; selecting = true; playAnim = false; return; } } } else { selecting = false; playAnim = true; } } } void mousemotion(int x, int y) { float mouseX = x; float mouseY = y; Mouse(mouseX, mouseY); if (selecting) { startVertices[verticeSelected][0] = mouseX; startVertices[verticeSelected][1] = mouseY; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(WindowWidth, WindowHeight); glutInitWindowPosition(100, 100); glutCreateWindow("贝赛尔曲线"); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutIdleFunc(idlefunc); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutMotionFunc(mousemotion); glutMainLoop(); return 0; }
评论
    相关推荐
    • 贝塞尔曲线
      实现n阶贝塞尔曲线,并用鼠标交互实现控制点的生成。
    • 贝塞尔曲线
      // 贝塞尔曲线最大阶数 private static final int REGION_WIDTH = 30; // 合法区域宽度 private static final int FINGER_RECT_SIZE = 60; // 矩形尺寸 private static final int BEZIER_WIDTH = 10; // 贝塞尔...
    • 贝塞尔曲线网络
      关于贝塞尔曲线 贝塞尔曲线网络 该项目是使用版本10.1.2生成的。 开发服务器 为开发服务器运行ng serve 。 导航到http://localhost:4200/ 。 如果您更改任何源文件,该应用程序将自动重新加载。 代码脚手架 运行ng...
    • 贝塞尔曲线
      NULL 博文链接:https://andydufresneone.iteye.com/blog/1179224
    • 贝塞尔曲线
      IOS 贝塞尔曲线 使用自定义控件实现贝塞尔曲线画图
    • 贝塞尔曲线
      贝塞尔曲线的用法,demo,将贝塞尔曲线和绘画,动画的结合使用
    • 贝塞尔曲线
      贝塞尔曲线以及算法
    • 贝塞尔曲线
      vs结合easyX实现贝塞尔曲线的绘制,并可以通过鼠标拖拽控制点实现曲线的变化
    • 贝塞尔曲线.zip
      贝塞尔曲线的形成过程,鼠标点击可移动关键点
    • codesforimageprocessing.rar
      实现简单图像处理,包括256色转灰度图、Hough变换、Walsh变换、中值滤波、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像缩放、图像镜像、均值滤波、对比度拉伸、拉普拉斯锐化(边缘检测)、方块编码、梯度锐化、灰度均衡、直方图均衡、离散余弦变换、维纳滤波处理、逆滤波处理、阈值变换、高斯平滑。