贝塞罗曲线

简介:

给定点P0,P1,线性贝兹曲线是这两点之间连线的点,方程式如下:

B(t) = P0 + (P1 - P0)t t取[0,1];


假设P0(x0, y0),P1(x1, y1), Pn((1-t)x0+tx1),(1-t)y0+ty1)

1)通过点在直线上,斜率相等证明一阶贝塞罗曲线是一直线

K(PnP0) = K(PnP1)这种方法相对简单

2)通过P0P1两点根据点斜式求出直线的方程,然后将Pn点代入,

同样可以证明,相对繁琐


void myDisplay()

{

  glClear(GL_COLOR_BUFFER_BIT);

  glColor3f(1.0f,0.f,0.f);

  int P1x = 10;

  int P1y = 10;

  int P2x = 200;

  int P2y = 400;

  glPointSize(3);

  glLineWidth(1);

  glBegin(GL_POINTS);

  glVertex2d(P1x, P1y);

  glVertex2d(P2x, P2y);

  for (int i=0; i<10; i++)

  {

    double t = i*0.1;

    double x = (1-t)*P1x + t* P2x;

    double y = (1-t)*P1y + t* P2y;

    glVertex2d(x, y);

  }

  glEnd();

  glColor3f(0.f,1.f,0.f);

  glBegin(GL_LINES);

  glVertex2d(P1x, P1y);

  glVertex2d(P2x, P2y);

  glEnd();

  glFlush();

}


二次方公式

二次方贝兹曲线的路径由给定点P0、P1、P2的函数B(t):

B(t) = (1-t)*(1-t)P0 + 2*t*(1-t)P1 + t*tP2 t取[0,1];


#include <windows.h>

#include <gl/gl.h>

#include <gl/glu.h>

#include <gl/glut.h>


//////////////////////////////////

void myInit()

{

  glClearColor(1.0,1.0,1.0,0.0);

  glLineWidth(3.0);

  glMatrixMode(GL_PROJECTION);

  glLoadIdentity();

  gluOrtho2D(0.0,640,0.0,480);

}

/////////////////////////////////////

void myDisplay()

{

  glClear(GL_COLOR_BUFFER_BIT);

  glColor3f(1.0f,0.f,0.f);

  int P1x = 10;

  int P1y = 10;

  int P2x = 200;

  int P2y = 400;

  int Pcx = 0;

  int Pcy = 200;

  glPointSize(3);

  glLineWidth(1);

  glBegin(GL_POINTS);

  glVertex2d(P1x, P1y);

  glVertex2d(P2x, P2y);

  glVertex2d(Pcx, Pcy);

  for (int i=0; i<100; i++)

  {

    double t = i*0.01;

    double x = (1-t)*(1-t)*P1x + 2*(1-t)*Pcx + t*t*P2x;

    double y = (1-t)*(1-t)*P1y + 2*(1-t)*Pcy + t*t*P2y;

    glVertex2d(x, y);

  }

  glEnd();

  glColor3f(0.f,1.f,0.f);

  glBegin(GL_LINES);

  glVertex2d(P1x, P1y);

  glVertex2d(P2x, P2y);

  glEnd();

  glFlush();

}

///////////////////////////////////////

void main(int argc,char **argv)

{

  glutInit(&argc,argv);

  glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

  glutInitWindowSize(640,480);

  glutInitWindowPosition(100,150);

  glutCreateWindow("example");

  glutDisplayFunc(myDisplay);

  myInit();

  glutMainLoop();

}




     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1379629,如需转载请自行联系原作者

相关文章
|
25天前
|
数据可视化
R语言中绘制ROC曲线和PR曲线
R语言中绘制ROC曲线和PR曲线
|
5月前
|
数据安全/隐私保护
滞回曲线处理器,骨架曲线,延性系数,耗能面积
为了批量处理拟静力试验得到的滞回曲线,计算骨架曲线,延性系数,耗能等指标,开发了“滞回曲线处理器”软件,具体功能介绍如下,软件在文末获取。
滞回曲线处理器,骨架曲线,延性系数,耗能面积
|
5月前
|
算法 数据可视化 C#
C# | Chaikin算法 —— 计算折线对应的平滑曲线坐标点
本文将介绍一种计算折线对应的平滑曲线坐标点的算法。该算法使用Chaikin曲线平滑处理的方法,通过控制张力因子和迭代次数来调整曲线的平滑程度和精度。通过对原始点集合进行切割和插值操作,得到平滑的曲线坐标点集合。实验结果表明,该算法能够有效地平滑折线,并且具有较高的精度和可控性。
67 0
C# | Chaikin算法 —— 计算折线对应的平滑曲线坐标点
|
11月前
|
Python
科赫曲线
科赫曲线
66 0
曲线的凹凸性与拐点
曲线的凹凸性与拐点
|
算法
对分类数据绘制对应的ROC曲线和AUC面积指标
对分类数据绘制对应的ROC曲线和AUC面积指标
231 0
对分类数据绘制对应的ROC曲线和AUC面积指标
111.绘制正态分布曲线
111.绘制正态分布曲线
81 0
144.绘制布朗运动曲线
144.绘制布朗运动曲线
85 0
075.绘制余弦曲线和直线的迭加
075.绘制余弦曲线和直线的迭加
49 0
R绘图 | 气泡散点图+拟合曲线
R绘图 | 气泡散点图+拟合曲线
270 0