使用C语言绘制三次B样条曲线段

题目

编写程序,给定四个控制点,绘制三次B样条曲线段。并自己设计图形,给定多个控制点,编写程序绘制B-样条曲线构造图形。

程序

#include<graphics.h>
#include<conio.h>
#include<math.h>
#include<stdio.h>
void b(int c, float p[4][2])
{
	int rate = 100, x, y;//x表示b样条曲线中每个点的横坐标。y表示b样条曲线中每个点的纵坐标
	float t, t2, t3;
	setcolor(c);
	//计算每个点的位置
	for (t = 0; t <= 1; t += 1.0 / rate)
	{
		t2 = pow(t,2);
		t3 = pow(t,3);
		//b样条计算公式
		x = ((1 - 3 * t + 3 * t2 - t3) * p[0][0] + (4 - 6 * t2 + 3 * t3) * p[1][0] + (1 + 3 * t + 3 * t2 - 3 * t3) * p[2][0] + t3 * p[3][0]) / 6;
		y = ((1 - 3 * t + 3 * t2 - t3) * p[0][1] + (4 - 6 * t2 + 3 * t3) * p[1][1] + (1 + 3 * t + 3 * t2 - 3 * t3) * p[2][1] + t3 * p[3][0]) / 6;
		if (t == 0) moveto(x, y);
		lineto(x, y);
	}
}
void main()
{
	int i;
	float p[4][2];
	printf("请输入第一个点的横坐标\n");
	scanf_s("%f", &p[0][0]);
	printf("请输入第一个点的纵坐标\n");
	scanf_s("%f", &p[0][1]);
	printf("请输入第二个点的横坐标\n");
	scanf_s("%f", &p[1][0]);
	printf("请输入第二个点的纵坐标\n");
	scanf_s("%f", &p[1][1]);
	printf("请输入第三个点的横坐标\n");
	scanf_s("%f", &p[2][0]);
	printf("请输入第三个点的纵坐标\n");
	scanf_s("%f", &p[2][1]);
	printf("请输入第四个点的横坐标\n");
	scanf_s("%f", &p[3][0]);
	printf("请输入第四个点的纵坐标\n");
	scanf_s("%f", &p[3][1]);
	initgraph(1000, 2000);
	setbkcolor(15);
	cleardevice();
	setcolor(BLUE);
	moveto(p[0][0], p[0][1]);
	for (i = 1; i <= 3; i++)
	{
		lineto(p[i][0], p[i][1]);
	}
	b(LIGHTRED, p);
	_getch();
}

结果

在这里插入图片描述
本题考察的知识为B样条曲线
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值