Bezier画线算法
编译器:VS2013
描述:Bezier画线是利用导数相同拼接曲线,使曲线十分光滑,而不是随意拼接观赏性很差
主函数段
#include "stdafx.h"
#include<stdio.h>
#include"graphics.h"
#include<stdlib.h>
#include<math.h> //函数声明
void Bezier4(int a[]);//四个控制点画出曲线
void Beziern(int a[], int N);//N个点画出曲线
int factorial(int n);//利用递归求出阶乘 int main()
{
int *p, N,gdriver = DETECT, gmove, i; printf("please input the number of point\n");
scanf_s("%d", &N); p = (int *)malloc( * N*sizeof(int)); printf("please input the coordinate:\n");
for (i = ; i < * N; i += )
scanf_s("%d%d", &p[i], &p[i + ]); initgraph(&gdriver, &gmove, ""); //画出多边形
for (i = ; i < *N-; i += )
line(p[i], p[i + ], p[i + ], p[i + ]); Beziern(p, N); system("pause"); closegraph(); return ;
}
Bezier画线函数
//N个点画出曲线
void Beziern(int a[], int N)
{
double t, X1 = a[], Y1 = a[];
int k,i; for (t = ; t <= ; t += 0.02)
{
putpixel(X1, Y1, YELLOW); X1 = , Y1 = ; for (i=,k = ; k<N; i+=,k ++)
{
X1 += 1.0*a[i] * factorial(N-) / factorial(k) / factorial(N- - k)*pow(t, k)*pow( - t, N- - k);//pow函数为求指数的函数
Y1 += 1.0*a[i+] * factorial(N-) / factorial(k) / factorial(N- - k)*pow(t, k)*pow( - t, N -- k);
} }
} //利用递归求出阶乘
inline int factorial(int n)
{
if (n > )
return n*factorial(n - );
else
return ;
}
结果:

Bezier画线算法的更多相关文章
- 两种画线算法(DDA&Bersenham)
DDA(digital differential analyzer) 由直线的斜截式方程引入 对于正斜率的线段,如果斜率<=1,则以单位x间隔(δx=1)取样,并逐个计算每一个y值 Yk+1 = ...
- Bresenham画线算法
[Bresenham画线算法] Bresenham是一种光栅化算法.不仅可以用于画线,也可以用用画圆及其它曲线. 通过lower与upper的差,可以知道哪一个点更接近线段: 参考:<计算机图形 ...
- 中点Brehensam画线算法
#include<stdio.h> #include<stdlib.h> #include"graphics.h" //函数声明 void MidBreha ...
- 计算机图形学(二)输出图元_3_画线算法_2_DDA算法
DDA算法 数字微分分析仪(digital differential analyzer, DDA)方法是一种线段扫描转换算法.基于使用等式(3.4)或等式(3.5)计算的&x或& ...
- DDA画线算法
#include<stdio.h> #include"graphics.h" #include<math.h> #include<stdlib.h&g ...
- Bresenham直线算法与画圆算法
在我们内部开发使用的一个工具中,我们需要几乎从 0 开始实现一个高效的二维图像渲染引擎.比较幸运的是,我们只需要画直线.圆以及矩形,其中比较复杂的是画直线和圆.画直线和圆已经有非常多的成熟的算法了,我 ...
- 计算机图形学DDA画线法+中点画线法+Bresenham画线法
#include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> ...
- 画线函数Glib_Line算法的研究
在这里首先先简单把我对函数的功能的理解阐述一下,方便后面的分析:Glib_Line函数实现的功能是通过参数给定(x1,y1,x2,y2,color),来确定起点(x1,y1)和终点(x2,y2)两 ...
- Android中Path类的lineTo方法和quadTo方法画线的区别
转载:http://blog.csdn.net/stevenhu_223/article/details/9229337 当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的li ...
随机推荐
- 破解电视盒 运营商送的,各种型号。通用 TTL 破解电视盒,更新华为悦盒
ZTE ZXV10B860AV1.1 准备工作,准备一个优盘,里面放上当贝桌面的apk 准备ttl线,淘宝10元以内包邮. 把优盘插打盒子上,打开盒子,用ttl连接上,只连gnd tx rx ,V ...
- L1-034 点赞
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持.每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性.本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特 ...
- axure 认证授权注册码2017-12-25
Licensee: University of Science and Technology of China (CLASSROOM)Key: DTXRAnPn1P65Rt0xB4eTQ+4bF5IU ...
- Java中的容器和注入分析
为什么会出现容器的注入? 容器:顾名思义,装东西的器物. 至于spring中bean,aop,ioc等一些都只是实现的方式:具体容器哪些值得我们借鉴,我个人觉得是封装的思想.将你一个独立的系统功能放到 ...
- Invalid /admin/*.jsp in filter mapping
完成错误信息 严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache ...
- vue 之 Vue.extend()
Vue.extend( options ) 参数: {Object} options 用法: 使用基础 Vue 构造器,创建一个“子类”.参数是一个包含组件选项的对象. data 选项是特例,需要注意 ...
- 玩转TypeScript(3)--数组
数组的语法和语义与C#数组非常相似,首先要指定一个数组名,后跟冒号,冒号后面紧跟数组的类型,数组类型名后面跟方括号表示当前定义的是一个数组,对于一个空的数组定义,可以使用如下的语法: btnArray ...
- iOS-----使用NSURLConnection
使用NSURLConnection 如果只是为了读取HTTP等服务器数据,或向服务器提交数据,iOS还提供了NSURLConnection类,NSURLConnection使用NSURLRequest ...
- I.MX6 Linux Serial Baud Rate hacking
/******************************************************************************** * I.MX6 Linux Seri ...
- Gym - 101550A Artwork (并查集在线做法)
题目链接 题意:给你一个n*m的网格图,初始时格点全白,每次可以将一段连续的格点涂黑.求出每次操作之后白色连通块的数量. 看了看网上的题解,基本全是离线的做法.其实这道题是有在线的做法的,利用了对偶图 ...