实现滑动选择器从离散型的数组中选择

1.使用原生的input

详细代码如下:

<template>
  <div class="slider-container">
    <!-- 滑动条 -->
    <input
      type="range"
      v-model.number="sliderIndex"
      :min="0"
      :max="customValues.length - 1"
      step="1"
      class="custom-slider"
    />

    <!-- 均分刻度 -->
    <div class="marks">
      <div 
        v-for="(value, index) in customValues"
        :key="index"
        class="mark"
        :style="{ left: getVisualPosition(index) + '%' }"
      >
        <div class="mark-line"></div>
        <div class="mark-label">{{ value }}</div>
      </div>
    </div>

    <p>当前值: {{ currentValue }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      customValues: [0, 0.1, 0.2, 1, 5, 10, 30, 50, 100],
      sliderIndex: 0
    };
  },
  computed: {
    currentValue() {
      return this.customValues[this.sliderIndex]; 
    }
  },
  methods: {
    getVisualPosition(index) {
      return (index / (this.customValues.length - 1)) * 100; 
    }
  }
};
</script>

<style scoped>
.slider-container {
  position: relative;
  width: 80%;
  margin: 20px auto;
}

.custom-slider{
  margin:0;
}

.custom-slider {
  width: 100%;
}

.marks {
  position: relative;
  height: 20px;
}

.mark {
  position: absolute;
  transform: translateX(-50%);
  text-align: center;
}

.mark-line {
  width: 2px;
  height: 8px;
  background: #666;
  margin: 0 auto;
}

.mark-label {
  font-size: 12px;
  color: #666;
  margin-top: 4px;
}
</style>

2.使用elementplus实现

代码如下:

<template>
  <el-slider 
    style='width:60%;margin: 0 auto;' 
    v-model="currentValue" 
    :min="0" 
    :max="marksRange"
    :step="1" 
    :format-tooltip="formatTooltip" 
  />
  <div style="margin-top:30px;text-align:center;">
    当前选中的值:{{ presetValues[currentValue] }}
  </div>
</template>

<script lang="ts" setup>
import { ref, computed } from 'vue'

// 预设的非线性数值
const presetValues: Array<number> = [0, 0.1, 0.2, 1, 5, 10, 30, 50, 100]
// 计算视觉均分跨度
const marksRange = presetValues.length - 1
// 当前选中的下标
const currentValue = ref<number>(0)

// 自定义提示格式化
const formatTooltip = (value: number) => {
  return presetValues[Math.round((value / marksRange) * (presetValues.length - 1))]
}
</script>

### STM32F103 边缘计算应用与配置 #### 使用场景概述 STM32F103系列微控制器因其高性能、低功耗以及丰富的外设接口,在边缘计算领域有着广泛的应用前景。这类设备可以部署于工业自动化、智能家居、物联网节点等多种场合,用于执行本地数据处理任务,减少云端负载并提高响应速度。 #### 硬件准备 为了实现基于STM32F103的边缘计算功能,通常需要配备必要的传感器模块(如温度湿度感应器)、通信单元(Wi-Fi/LoRa/Zigbee等),并通过SPI/IIC/GPIO等方式连接至MCU。此外,还可能涉及到外部存储器件的选择,比如SD卡或者Flash芯片,以便保存采集到的数据供后续分析使用[^1]。 #### 软件环境搭建 针对STM32F103开发板,推荐采用最新版的STM32CubeMX工具来进行初始化设置,并利用HAL库简化编程工作量。具体来说: - 安装好ST-LINK驱动程序之后启动STM32CubeMX软件; - 创建新项目时选择对应的型号——STM32F103RCT6为例; - 在Pinout&Configuration界面下完成对外围资源的功能定义,例如开启ADC转换通道测量物理信号强度;启用USART串口调试打印信息;使能TIM定时器中断触发事件计数等功能; - 利用中间件组件集成FreeRTOS操作系统框架支持多任务调度机制,从而更好地管理不同优先级的任务流程; - 导出工程文件夹导入Keil MDK IDE继续编写应用程序逻辑部分代码。 #### 数据预处理算法设计 考虑到实际应用场景中的需求差异较大,这里给出一种简单的滤波方法作为示范:滑动平均法。该算法能够有效去除随机干扰成分的同时保留原始趋势特征,适用于大多数情况下的初步过滤操作。以下是C语言描述的一个简易实现方式: ```c #define FILTER_LENGTH 5 // 滤波窗口长度设定为5个样本点 float filter_buffer[FILTER_LENGTH]; // 存储最近几次采样值得数组空间分配 uint8_t index = 0; // 当前写入位置指示变量声明 void init_filter(){ memset(filter_buffer, 0 , sizeof(float)*FILTER_LENGTH); } float apply_moving_average(float new_sample){ float sum = 0; static uint8_t count = 0; if(count<FILTER_LENGTH){count++;} filter_buffer[index++] = new_sample; if(index >= FILTER_LENGTH)index=0; for(int i=0;i< FILTER_LENGTH ;i++){ sum +=filter_buffer[i]; } return (sum/count); } ``` 上述函数`apply_moving_average()`接收来自传感器的新鲜读数值作为输入参数,并返回经过平滑后的估计结果。此过程会持续更新内部缓存区内的历史记录直至达到预定容量上限为止。 #### 实现快速傅里叶变换(FFT) 对于某些特定类型的边缘计算任务而言,频域特性往往比时间序列本身更具价值。因此,借助内置DSP指令集加速运算效率成为了一种可行方案之一。根据提供的资料可知,官方已经给出了三种不同规模大小的复数型Radix-4 FFT汇编子程序可供调用[^2]: ```c extern "C"{ #include "stm32_dsp.h" } // 假定输入输出缓冲均为全局静态变量形式存在 static complex_float input_signal[BUFFER_SIZE],output_spectrum[BUFFER_SIZE]; void perform_fft_on_input_data(){ switch(log2(BUFFER_SIZE)){ case 6 :cr4_fft_64_stm32((void*)output_spectrum,(void*)input_signal,BUFFER_SIZE>>1);break; case 8 :cr4_fft_256_stm32((void*)output_spectrum,(void*)input_signal,BUFFER_SIZE>>1);break; default:cr4_fft_1024_stm32((void*)output_spectrum,(void*)input_signal,BUFFER_SIZE>>1); } } ``` 以上片段展示了如何依据当前使用的样本数量自动匹配最合适的API入口来完成离散傅立叶变化的过程。需要注意的是,由于这些底层优化过的例程均是以定点数表示法为基础构建而成,所以在传递实参之前应当先做好相应的类型转换准备工作。 #### PCB布局注意事项 当涉及到高频电路的设计环节时,合理的线路规划显得尤为重要。特别是那些具有较高阻抗特性的模拟路径容易受到周围电磁场的影响而引入额外噪声分量。为了避免此类现象的发生,建议遵循以下原则进行布线作业:尽可能缩短关键导体间的间距;合理安排电源层与地平面的位置关系;必要情况下增设屏蔽罩隔离敏感区域等等措施都能显著改善整体性能表现[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值