当前位置: 首页 > article >正文

C语言 二维线性查表linearInterpolation 100行实现通用线性查表

介绍

本 linearInterpolation 模块是基于C语言提供的一维/二维线性插值算法。表格值是为float类型,适合在单片机中使用。

软件架构

序号文档说明
1linearInterpolation.h线性查表头文件
2linearInterpolation.c线性查表实现
3main.c演示程序

引入模块

git submodule add git@gitee.com:DyyYq/linearInterpolation.git submodules/linearInterpolation

引入头文件

以下代码引入了linearInterpolation.h头文件,定定义了演示用的表变量 demoTable。 表 demoTable可以当一维表用,也可以当二维表用。

#include "linearInterpolation.h"

linearInterpolation_t demoTable;

填充表格内容(一维表)

以下代码对表demoTable进行了一维内容填充👇

/*
* Y
* ↑
* | 
* 20-------------*
* |
* 15--------*
* |
* 10---* 
* |
* *----2----4----8-------------> X
*/
//static的约束保障了这些变量的空间不会被收回
static float xValues[] = {2, 4, 8};
static float yValues[] = {10.0f, 15.0f, 20.0f};
tableInitXY_withValues(&demoTable, 3, xValues,yValues);

填充表格内容(二维表)

以下代码对表demoTable进行了二维内容填充👇

/*
* *----1----2-----------------> X
* |
* 1    2    3
* |
* 2    3    4
* |
* 3    4    8
* |
* ↓
* Y
*/
//static的约束保障了这些变量的空间不会被收回
static float xValues[] = {1,2};
static float yValues[] = {1,2,3};

static float zValues[][2] = {   {2,3},
                                {3,4},
                                {4,8}};
tableInitXYZ_withValues(&demoTable, 2, 3, xValues, yValues, zValues);

一维查表

如果你对表格进行了一维填充,则可以对这个表格进行一维查表。如下是对表demoTable进行一维查表👇

float userX=0;
while (1)
{
    printf("please input X value:"); scanf("%f", &userX);
    printf("the x is: %f, then the y should be: %f\n", userX, demoTable.getY(&demoTable, userX));
}

方法 getY 可以根据指定的x值查表获取对应的 y 值。

二维查表

如果你对表格进行了二维填充,则可以对这个表格进行二维查表。如下是对表demoTable进行二维查表👇

float userX=0, userY=0;
while (1)
{
    printf("please input X value:"); scanf("%f", &userX);
    printf("please input Y value:"); scanf("%f", &userY);
    printf("the coord is: (%f, %f), then the z should be: %f\n", userX, userY, demoTable.getZ(&demoTable, userX, userY));
}

方法 getZ 可以根据指定的 xy 值,查表获取对应的 z值。

小结

以上就是本模块所提供的线性查表方法了。


http://www.kler.cn/a/612441.html

相关文章:

  • 深入理解Golang标准库`testing/fstest`包的用法和技巧进行文件系统测试
  • linux之 内存管理(5)-CMA 连续内存管理器
  • 行业大数据实验报告 通过聚类算法实现睡眠健康群体的精准智能划分
  • 如何在 HTML 中使用<dialog>标签创建模态对话框,有哪些交互特性
  • Spring AOP:面向切面编程的探索之旅
  • PTA 1105-链表合并(C++)
  • SpringMVC实战——转发和重定向及实际场景
  • Dify实现自然语言生成SQL并执行
  • 高级数据结构01BST树
  • 如何使用VS中的Android Game Development Extension (AGDE) 来查看安卓 Logcat 日志
  • ‌JVM 内存模型(JDK8+)
  • 如何使用Python爬虫按关键字搜索1688商品?
  • 测谎仪策略思路
  • linux 安装open webui
  • 第二十章:类型属性的重载_《C++ Templates》notes
  • 【商城实战(80)】从0到1剖析:区块链如何重塑商城生态
  • Lisp语言的数据库交互
  • WPF 依赖项属性
  • 使用django的DRF业务逻辑应该放在序列化器类还是模型类
  • 前端空白/红幕报错 undefined