当前位置:首页 > 代码 > 正文

贝塞尔曲线c语言代码(贝塞尔函数编程)

admin 发布:2022-12-19 21:20 151


本篇文章给大家谈谈贝塞尔曲线c语言代码,以及贝塞尔函数编程对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

【贝塞尔曲线:如何让一个正在按照贝塞尔曲线运动的精灵减速或加速

CCSprite *sprite3=[CCSprite spriteWithFile:@"giantAnt.png"]; sprite3.position=ccp(100,100); [self addChild:sprite3 z:999 tag:9987]; id move = [CCBezierTo actionWithDuration:5.0f bezier:config]; id speed =[CCSpeed actionWithAction:move speed:1.0f]; [speed setTag:222]; [sprite3 runAction:speed]; 如何要减速的话就执行这行代码[(CCSpeed*)[[self getChildByTag:9987] getActionByTag:222] setSpeed:0.5f];加速[(CCSpeed*)[[self getChildByTag:9987] getActionByTag:222] setSpeed:1.5f];

帮忙看一下下面一段代码有什么错误 懂C语言的进

是画一条贝塞尔曲线的代码:apt数组包含四个点,两个端点和两个控制点。(其中第2和第3是控制点,第1和第4是端点)

首先PolyBezier()函数画出被赛尔曲线,然后下面的四条语句用来将端点和控制点连接。

这段代码是Charles Petzold写的《windows程序设计》中的源代码:

全部程序如下:

#include windows.h

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = TEXT ("Bezier") ;

HWND hwnd ;

MSG msg ;

WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = NULL ;

wndclass.lpszClassName = szAppName ;

if (!RegisterClass (wndclass))

{

MessageBox (NULL, TEXT ("Program requires Windows NT!"),

szAppName, MB_ICONERROR) ;

return 0 ;

}

hwnd = CreateWindow (szAppName, TEXT ("Bezier Splines"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance, NULL) ;

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

while (GetMessage (msg, NULL, 0, 0))

{

TranslateMessage (msg) ;

DispatchMessage (msg) ;

}

return msg.wParam ;

}

void DrawBezier (HDC hdc, POINT apt[])

{

PolyBezier (hdc, apt, 4) ;

MoveToEx (hdc, apt[0].x, apt[0].y, NULL) ;

LineTo (hdc, apt[1].x, apt[1].y) ;

MoveToEx (hdc, apt[2].x, apt[2].y, NULL) ;

LineTo (hdc, apt[3].x, apt[3].y) ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

static POINT apt[4] ;

HDC hdc ;

int cxClient, cyClient ;

PAINTSTRUCT ps ;

switch (message)

{

case WM_SIZE:

cxClient = LOWORD (lParam) ;

cyClient = HIWORD (lParam) ;

apt[0].x = cxClient / 4 ;

apt[0].y = cyClient / 2 ;

apt[1].x = cxClient / 2 ;

apt[1].y = cyClient / 4 ;

apt[2].x = cxClient / 2 ;

apt[2].y = 3 * cyClient / 4 ;

apt[3].x = 3 * cxClient / 4 ;

apt[3].y = cyClient / 2 ;

return 0 ;

case WM_LBUTTONDOWN:

case WM_RBUTTONDOWN:

case WM_MOUSEMOVE:

if (wParam MK_LBUTTON || wParam MK_RBUTTON)

{

hdc = GetDC (hwnd) ;

SelectObject (hdc, GetStockObject (WHITE_PEN)) ;

DrawBezier (hdc, apt) ;

if (wParam MK_LBUTTON)

{

apt[1].x = LOWORD (lParam) ;

apt[1].y = HIWORD (lParam) ;

}

if (wParam MK_RBUTTON)

{

apt[2].x = LOWORD (lParam) ;

apt[2].y = HIWORD (lParam) ;

}

SelectObject (hdc, GetStockObject (BLACK_PEN)) ;

DrawBezier (hdc, apt) ;

ReleaseDC (hwnd, hdc) ;

}

return 0 ;

case WM_PAINT:

InvalidateRect (hwnd, NULL, TRUE) ;

hdc = BeginPaint (hwnd, ps) ;

DrawBezier (hdc, apt) ;

EndPaint (hwnd, ps) ;

return 0 ;

case WM_DESTROY:

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam) ;

}

C语言编程高手进——贝塞尔曲线程序

/* Subroutine to generate a Bezier curve.

Copyright (c) 2000 David F. Rogers. All rights reserved.

b[] = array containing the defining polygon vertices

b[1] contains the x-component of the vertex

b[2] contains the y-component of the vertex

b[3] contains the z-component of the vertex

Basis = function to calculate the Bernstein basis value (see MECG Eq 5-65)

cpts = number of points to be calculated on the curve

Fractrl = function to calculate the factorial of a number

j[] = array containing the basis functions for a single value of t

npts = number of defining polygon vertices

p[] = array containing the curve points

p[1] contains the x-component of the point

p[2] contains the y-component of the point

p[3] contains the z-component of the point

t = parameter value 0 = t = 1

*/

#include math.h

/* function to calculate the factorial */

float factrl(int n)

{

static int ntop=6;

static float a[33]={1.0,1.0,2.0,6.0,24.0,120.0,720.0}; /* fill in the first few values */

int j1;

if (n 0) printf("\nNegative factorial in routine FACTRL\n");

if (n 32) printf("\nFactorial value too large in routine FACTRL\n");

while (ntop n) { /* use the precalulated value for n = 0....6 */

j1 = ntop++;

a[n]=a[j1]*ntop;

}

return a[n]; /* returns the value n! as a floating point number */

}

/* function to calculate the factorial function for Bernstein basis */

float Ni(int n,int i)

{

float ni;

ni = factrl(n)/(factrl(i)*factrl(n-i));

return ni;

}

/* function to calculate the Bernstein basis */

float Basis(int n,int i,float t)

{

float basis;

float ti; /* this is t^i */

float tni; /* this is (1 - t)^i */

/* handle the special cases to avoid domain problem with pow */

if (t==0. i == 0) ti=1.0; else ti = pow(t,i);

if (n==i t==1.) tni=1.0; else tni = pow((1-t),(n-i));

basis = Ni(n,i)*ti*tni; /* calculate Bernstein basis function */

return basis;

}

/* Bezier curve subroutine */

bezier(npts,b,cpts,p)

int cpts;

int npts;

float b[];

float p[];

{

int i;

int j;

int i1;

int icount;

int jcount;

int n;

float step;

float t;

float factrl(int);

float Ni(int,int);

float Basis(int,int,float);

/* calculate the points on the Bezier curve */

icount = 0;

t = 0;

step = 1.0/((float)(cpts -1));

for (i1 = 1; i1=cpts; i1++){ /* main loop */

if ((1.0 - t) 5e-6) t = 1.0;

for (j = 1; j = 3; j++){ /* generate a point on the curve */

jcount = j;

p[icount+j] = 0.;

for (i = 1; i = npts; i++){ /* Do x,y,z components */

p[icount + j] = p[icount + j] + Basis(npts-1,i-1,t)*b[jcount];

jcount = jcount + 3;

}

}

icount = icount + 3;

t = t + step;

}

}

C语言,windows程序在窗口上绘图

AngleArc 用一个连接弧画一条线

Arc 画一个圆弧

BeginPath 启动一个路径分支

CancelDC 取消另一个线程里的长时间绘图操作

Chord 画一个弦

CloseEnhMetaFile 关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄

CloseFigure 描绘到一个路径时,关闭当前打开的图形

CloseMetaFile 关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄

CopyEnhMetaFile 制作指定增强型图元文件的一个副本(拷贝)

CopyMetaFile 制作指定(标准)图元文件的一个副本

CreateBrushIndirect 在一个LOGBRUSH数据结构的基础上创建一个刷子

CreateDIBPatternBrush 用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)

CreateEnhMetaFile 创建一个增强型的图元文件设备场景

CreateHatchBrush 创建带有阴影图案的一个刷子

CreateMetaFile 创建一个图元文件设备场景

CreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子

CreatePen 用指定的样式、宽度和颜色创建一个画笔

CreatePenIndirect 根据指定的LOGPEN结构创建一个画笔

CreateSolidBrush 用纯色创建一个刷子

DeleteEnhMetaFile 删除指定的增强型图元文件

DeleteMetaFile 删除指定的图元文件

DeleteObject 删除GDI对象,对象使用的所有系统资源都会被释放

DrawEdge 用指定的样式描绘一个矩形的边框

DrawEscape 换码(Escape)函数将数据直接发至显示设备驱动程序

DrawFocusRect 画一个焦点矩形

DrawFrameControl 描绘一个标准控件

DrawState 为一幅图象或绘图操作应用各式各样的效果

Ellipse 描绘一个椭圆,由指定的矩形围绕

EndPath 停止定义一个路径

EnumEnhMetaFile 针对一个增强型图元文件,列举其中单独的图元文件记录

EnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录

EnumObjects 枚举可随同指定设备场景使用的画笔和刷子

ExtCreatePen 创建一个扩展画笔(装饰或几何)

ExtFloodFill 在指定的设备场景里,用当前选择的刷子填充一个区域

FillPath 关闭路径中任何打开的图形,并用当前刷子填充

FillRect 用指定的刷子填充一个矩形

FlattenPath 将一个路径中的所有曲线都转换成线段

FloodFill 用当前选定的刷子在指定的设备场景中填充一个区域

FrameRect 用指定的刷子围绕一个矩形画一个边框

GdiComment 为指定的增强型图元文件设备场景添加一条注释信息

GdiFlush 执行任何未决的绘图操作

GdiGetBatchLimit 判断有多少个GDI绘图命令位于队列中

GdiSetBatchLimit 指定有多少个GDI绘图命令能够进入队列

GetArcDirection 画圆弧的时候,判断当前采用的绘图方向

GetBkColor 取得指定设备场景当前的背景颜色

GetBkMode 针对指定的设备场景,取得当前的背景填充模式

GetBrushOrgEx 判断指定设备场景中当前选定刷子起点

GetCurrentObject 获得指定类型的当前选定对象

GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置

GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄

GetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里

GetEnhMetaFileDescription 返回对一个增强型图元文件的说明

GetEnhMetaFileHeader 取得增强型图元文件的图元文件头

GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板

GetMetaFile 取得包含在一个磁盘文件中的图元文件的图元文件句柄

GetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区

GetMiterLimit 取得设备场景的斜率限制(Miter)设置

GetNearestColor 根据设备的显示能力,取得与指定颜色最接近的一种纯色

GetObjectAPI 取得对指定对象进行说明的一个结构

GetObjectType 判断由指定句柄引用的GDI对象的类型

GetPath 取得对当前路径进行定义的一系列数据

GetPixel 在指定的设备场景中取得一个像素的RGB值

GetPolyFillMode 针对指定的设备场景,获得多边形填充模式

GetROP2 针对指定的设备场景,取得当前的绘图模式

GetStockObject 取得一个固有对象(Stock)

GetSysColorBrush 为任何一种标准系统颜色取得一个刷子

GetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件

InvertRect 通过反转每个像素的值,从而反转一个设备场景中指定的矩形

LineDDA 枚举指定线段中的所有点

LineTo 用当前画笔画一条线,从当前位置连到一个指定的点

MoveToEx 为指定的设备场景指定一个新的当前画笔位置

PaintDesk 在指定的设备场景中描绘桌面墙纸图案

PathToRegion 将当前选定的路径转换到一个区域里

Pie 画一个饼图

PlayEnhMetaFile 在指定的设备场景中画一个增强型图元文件

PlayEnhMetaFileRecord 回放单独一条增强型图元文件记录

PlayMetaFile 在指定的设备场景中回放一个图元文件

PlayMetaFileRecord 回放来自图元文件的单条记录

PolyBezier 描绘一条或多条贝塞尔(Bezier)曲线

PolyDraw 描绘一条复杂的曲线,由线段及贝塞尔曲线组成

Polygon 描绘一个多边形

Polyline 用当前画笔描绘一系列线段

PolyPolygon 用当前选定画笔描绘两个或多个多边形

PolyPolyline 用当前选定画笔描绘两个或多个多边形

Rectangle 用当前选定的画笔描绘矩形,并用当前选定的刷子填充

RoundRect 用当前选定的画笔画一个圆角矩形,并用当前选定的刷子在其中填充

SelectClipPath 将设备场景当前的路径合并到剪切区域里

SelectObject 为当前设备场景选择图形对象

SetArcDirection 设置圆弧的描绘方向

SetBkColor 为指定的设备场景设置背景颜色

SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式

SetBrushOrgEx 为指定的设备场景设置当前选定刷子的起点

SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创建一个增强型图元文件

SetMetaFileBitsEx 用包含在指定内存缓冲区内的数据结构创建一个图元文件

SetMiterLimit 设置设备场景当前的斜率限制

SetPixel 在指定的设备场景中设置一个像素的RGB值

SetPixelV 在指定的设备场景中设置一个像素的RGB值

SetPolyFillMode 设置多边形的填充模式

SetROP2 设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致

SetWinMetaFileBits 将一个标准Windows图元文件转换成增强型图元文件

StrokeAndFillPath 针对指定的设备场景,关闭路径上打开的所有区域

StrokePath 用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭

UnrealizeObject 将一个刷子对象选入设备场景之前,如刷子的起点准备用SetBrushOrgEx修改,则必须先调用本函数

WidenPath 根据选定画笔的宽度,重新定义当前选定的路径

贝塞尔曲线c语言代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于贝塞尔函数编程、贝塞尔曲线c语言代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/24683.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载