计算机图形学作业:三阶贝塞尔曲面

题目要求

编写程序,设计一个三阶的 Bezier 曲面,在给定控制点的情况下,计算出 Bezier 曲面上的点(设 u,v 方向的曲面精度可通过参数设置),然后将这些点保存到数组中。如果该 Bezier 曲面以三角面为基本图元进行存储,计算出三角形顶点的索引,并保存到数组中。

解答

//三阶(次)Bezier曲面
float R[4][4][3];//控制点三维数组,每一维分别为u,v方向,xyz坐标
typedef struct indexs {int m, n;
}Indexs;
Indexs indices[N];  //索引
void Bezier(float uc,float vc) //uc,vc,控制曲面精度的增量
{
//数组最大长度101,精度最大0.01float points_u[101][4][3] = { 0.0 };for (int j = 0; j < 4; j++) {int t = 0;for (double u = 0.0; u <= 1.0; u += uc){float B0u = (1 - u) * (1 - u) * (1 - u);float B1u = 3 * (1 - u) * (1 - u) * u;float B2u = 3 * (1 - u) * u * u;float B3u = u * u * u;points_u[t][j][0] = R[0][j][0] * B0u + R[1][j][0] * B1u + R[2][j][0] * B2u + R[3][j][0] * B3u;points_u[t][j][1] = R[0][j][1] * B0u + R[1][j][1] * B1u + R[2][j][1] * B2u + R[3][j][1] * B3u;points_u[t][j][2] = R[0][j][2] * B0u + R[1][j][2] * B1u + R[2][j][2] * B2u + R[3][j][2] * B3u;t = t + 1;}}float points_uv[101][101][3] = { 0.0 };//存Bezier 曲面上的点for (int j = 0; j < 1.0/uc+1; j++) {int i = 0;for (double t = 0.0; t <= 1.0; t += vc){float a1 = (1 - t) * (1 - t) * (1 - t);float a2 = 3 * (1 - t) * (1 - t) * t;float a3 = 3 * t * t * (1 - t);float a4 = t * t * t;points_uv[j][i][0] = a1 * points_u[j][0][0] + a2 * points_u[j][1][0] + a3 * points_u[j][2][0] + a4 * points_u[j][3][0];points_uv[j][i][1] = a1 * points_u[j][0][1] + a2 * points_u[j][1][1] + a3 * points_u[j][2][1] + a4 * points_u[j][3][1];points_uv[j][i][2] = a1 * points_u[j][0][2] + a2 * points_u[j][1][2] + a3 * points_u[j][2][2] + a4 * points_u[j][3][2];i = i + 1;}
}int k = 0; //保存索引for (int i = 0; i < 1.0/vc+1; i++){for (int j = 0; j < 1.0/uc+1; j++){indices[k].m = j;indices[k].n = i;k++;indices[k].m = j;indices[k].n = i+1;k++;indices[k].m = j+1;indices[k].n = i;k++;indices[k].m = j + 1;indices[k].n = i;k++;indices[k].m = j ;indices[k].n = i+ 1;k++;indices[k].m = j + 1;indices[k].n = i + 1;k++;}}
}

参考:双三次Bezier曲面-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【精选】 dockerFile 使用简介 (超详细)

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步…

开放式耳机品牌排行榜,2024开放式耳机选购攻略

我在选后开放式耳机的路上可以说是花了不少米&#xff0c;前前后后也下了不少的功夫去做功课了解开放式耳机&#xff0c;包括市面上目前最火的西圣、南卡、cleer等热门型号我都有用过了&#xff0c;可以说是很有发言权了吧。 开放式耳机现在越来越涌现在大众的视野上了&#x…

如何构建Prompt,帮我生成QA,作为召回率检索的测试集?

最近在做搜索召回率的提升工作。粮草未动兵马先行&#xff01;在做之前应该先有一把尺子来衡量召回率的好坏。所以应该先构建测试数据集&#xff0c;然后去做标准化测试。 有了测试机集以后。再去做搜索优化&#xff0c;才能看出来效果。 当然可以选择一些开源的测试集。如果可…

POI:对Excel的基本读操作 整理2

1 简单读取操作 public class ExcelRead {String PATH "D:\\Idea-projects\\POI\\POI_projects";// 读取的一系列方法// ...... } 因为07版本和03版本操作流程大差不差&#xff0c;所以这边就以03版本为例 Testpublic void testRead03() throws IOException {//获取…

ctypes实现numpy和OpenCV Mat之间的数据交互

1、目的 将c/c编译成动态链接库&#xff0c;通过python调用&#xff0c;实现常见变量比如int&#xff0c;字符串之间的交互&#xff0c;以及np.ndarray和cv::Mat间的交互. 更简单的方式参考&#xff1a;pybind11实现numpy和OpenCV Mat的数据交互-CSDN博客 2 步骤 新建CMakeL…

运用AI搭建中间服务层(三)

CognitiveServices文件夹 在这个文件夹中&#xff0c;我们需要添加以下文件&#xff1a; IVisionService.cs 视觉服务 .cs 视觉结果.cs IEntitySearchService.cs 实体搜索服务.cs 实体结果.cs 帮助程序.cs IVisionService.cs - 访问影像服务的接口定义&#xff0c;需要…

可拖拽表单比传统表单好在哪里?

随着行业的进步和发展&#xff0c;可拖拽表单的应用价值越来越高&#xff0c;在推动企业实现流程化办公和数字化转型的过程中发挥了重要价值和作用&#xff0c;是提质增效的办公利器&#xff0c;也是众多行业客户朋友理想的合作伙伴。那么&#xff0c;可拖拽表单的优势特点表单…

【MySQL】聚合函数与分组查询

聚合函数与分组查询 一、聚合函数1、常见的聚合函数2、实例 二、分组查询1、group by子句2、准备工作3、实例4、having 条件 一、聚合函数 说明&#xff1a;聚合函数用来计算一组数据的集合并返回单个值&#xff0c;通常用这些函数完成&#xff1a;个数的统计&#xff0c;某列…

Dubbo 框架揭秘:分布式架构的精髓与魔法【一】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Dubbo 框架揭秘&#xff1a;分布式架构的精髓与魔法【一】 前言Dubbo是什么Dubbo的核心概念整体设计 前言 在数字时代&#xff0c;分布式架构正成为应对大规模流量和复杂业务场景的标配。Dubbo&#…

vue项目使用typescript创建抽象类及其使用

如题&#xff0c;可以在vue项目使用typescript创建抽象类&#xff0c;然后使用这个抽象类。 通过TypeScript&#xff0c;可以在前端应用抽象类了。抽象类的好处&#xff0c;可以同时满足继承和多态&#xff0c;好处多多。以vue3为例&#xff1a; 1、创建抽象类 据说js类中&a…

监督学习 - XGBoost(eXtreme Gradient Boosting)

什么是机器学习 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是一种梯度提升树算法&#xff0c;它在梯度提升框架的基础上引入了一些创新性的特性&#xff0c;以提高模型性能和训练速度。XGBoost在解决结构化数据的分类和回归问题上表现出色&#xff0c;成为许多…

Unity-游戏与帧

游戏的本质就是一个死循环 “游戏的本质就是一个死循环”这句话&#xff0c;其实是指游戏引擎的主循环。游戏引擎是游戏开发中最核心的部分&#xff0c;它负责处理玩家的输入、更新游戏状态、渲染画面等工作&#xff0c;而这些工作都是在一个不断重复的循环中完成的。 具体来…

【快刊录用】ABS一星,2区,仅2个月15天录用!

2023年12月30日-2024年1月5日 进展喜讯 经核实&#xff0c;由我处Unionpub学术推荐的论文中&#xff0c;新增2篇论文录用、3篇上线见刊、1篇数据库检索&#xff1a; 录用通知 FA20107 FA20181 — 见刊通知 FB20805 FA20269 FA20797 检索通知 FA20199 — — 计算机…

配网故障定位技术的发展与应用:保障电力供应安全稳定的重要支撑

在现代社会&#xff0c;电力供应安全稳定对于国家经济发展和民生福祉至关重要。然而&#xff0c;随着电网规模的不断扩大&#xff0c;配网故障问题也日益突出。为了确保电力供应的连续性和可靠性&#xff0c;人们不断探索和研发各种故障定位技术。本文将介绍一种基于行波测距技…

[Linux 进程(二)] Linux进程状态

文章目录 1、进程各状态的概念1.1 运行状态1.2 阻塞状态1.3 挂起状态 2、Linux进程状态2.1 运行状态 R2.2 睡眠状态 S2.3 深度睡眠 D2.4 停止状态 T2.5 僵尸状态 Z 与 死亡状态 X孤儿进程 Linux内核中&#xff0c;进程状态&#xff0c;就是PCB中的一个字段&#xff0c;是PCB中的…

2401d,ddip1027如何支持sql

原文 以下是DIP1036的SQL支持方式: 这里 auto execi(Args...)(Sqlite db, InterpolationHeader header, Args args, InterpolationFooter footer) {import arsd.sqlite;//SQLite允许你执行?1,?2等操作enum string query () {string sql;int number;import std.conv;foreach…

智慧食堂管理方式,究竟改变了什么?

随着科技的迅速发展&#xff0c;餐饮业也在不断地迎来新的挑战和机遇。为了提升食堂管理效率、改善用户体验以及提高收益&#xff0c;许多食堂纷纷引入智慧收银系统。 客户案例 企业食堂改革 石家庄某大型企业食堂由于员工数量庞大&#xff0c;传统的收银方式难以满足快速就餐…

大话 JavaScript(Speaking JavaScript):第二十一章到第二十五章

第二十一章&#xff1a;数学 原文&#xff1a;21. Math 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 Math对象用作多个数学函数的命名空间。本章提供了一个概述。 数学属性 Math的属性如下&#xff1a; Math.E 欧拉常数&#xff08;e&#xff09; Math.LN2 2 …

Verilog 和 System Verilog 的区别

当谈到VLSI设计和数字电路建模时&#xff0c;verilog和system verilog是两种常用的硬件描述语言。这些 HDL 在 VLSI 设计中用于描述电子电路的行为和结构。它们都广泛应用于半导体行业来设计和实现集成电路&#xff08;IC&#xff09;。 它们是设计和模拟复杂数字系统的强大工具…

解决:ModuleNotFoundError: No module named ‘dbutils’

解决&#xff1a;ModuleNotFoundError: No module named ‘dbutils’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named dbutils背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&#xff0c;…