首页 > 其他分享 >狗狗能看到什么颜色视觉工具,实现过程

狗狗能看到什么颜色视觉工具,实现过程

时间:2025-01-07 09:47:50浏览次数:6  
标签:颜色 狗狗 颜色视觉 组件 const 工具 Math

从代码到现实:狗狗能看到什么颜色视觉工具

引言

作为一名对前端技术充满热情的技术爱好者,我一直想把技术应用到实际生活中的场景中。最近,我决定挑战一下:能不能做一个在线工具,帮助大家理解狗狗的颜色视觉?于是,我开始了我的狗狗颜色视觉模拟工具的开发之旅,本文将从技术层面介绍我的实现过程。

技术选型与项目架构

我选择了 React 作为前端框架,配合 NextUI 组件库来快速构建用户界面。react-colorful 库提供了颜色选择器,同时我编写了 JavaScript 函数来模拟狗狗的视觉效果。

  • 前端框架: React
  • UI 组件库: NextUI
  • 颜色选择器: react-colorful
  • 状态管理: 使用 useState hook 管理颜色状态
  • useEffect: 使用 useEffect 监听颜色变化,并获取颜色名称

核心功能实现

  1. 颜色输入:

    • Input 组件: 我使用了 NextUI 的 Input 组件,用于用户输入十六进制颜色代码,并且实现了即时更新颜色状态的功能。
    • HexColorPicker 组件: 我集成了 react-colorfulHexColorPicker 组件,使用户可以通过图形化的方式选择颜色,并实时更新颜色状态。
  2. 颜色转换 & 视觉模拟:

    • isColorVisibleToDog 函数: 我编写了 isColorVisibleToDog 函数,用于模拟狗狗的颜色视觉。该函数接收一个十六进制颜色值作为输入,然后根据简化的颜色转换规则返回模拟后的颜色、可见度评级以及狗狗是否能看到该颜色。
    • 简化算法: isColorVisibleToDog 内部的算法主要基于:
      • 灰色感知: 计算输入颜色的灰度值(通过 0.3 * r + 0.6 * g + 0.1 * b),模拟狗狗看到的灰度部分。
      • 蓝-黄感知: 计算输入颜色中蓝色和黄色的成分(通过 0.4 * g + 0.6 * b ),然后根据此值生成模拟的颜色。
      • 可见度评级: 基于模拟颜色的蓝-黄成分,定义可见度等级(高、中、低)。
  3. getColorName 函数:

    • 我使用了 getColorName 函数,它接收一个十六进制颜色值并返回该颜色的名称。这增加了用户界面的友好性和信息量。
  4. 视觉呈现:

    • Card 组件: 我使用 NextUI 的 Card 组件作为容器,将颜色选择器和视觉模拟结果组织起来。
    • 背景颜色和阴影: 通过动态设置 backgroundColorboxShadow 样式,我将人类和狗狗的视觉感知结果直观地展现出来。
    • 可见度等级显示: 我使用了不同的文本颜色和描述,以视觉化的方式显示颜色的可见度等级。
    • 判断是否可见: 我直接使用 isColorVisibleToDog 函数的返回值来展示狗狗是否能看到这个颜色。
  5. 响应式布局:

    • Grid: 我使用 CSS Grid 布局,确保在不同屏幕尺寸下都能呈现良好的视觉效果。

代码片段(is-color-visible-to-dog.js

这是我实现颜色转换和可见度判断的核心代码(简化版):

export function isColorVisibleToDog(hexColor) {
  if (!hexColor || hexColor.length !== 7 || !hexColor.startsWith("#")) {
    return { dogVision: "#808080", visibility: "low", isVisible: false };
  }

  const r = parseInt(hexColor.slice(1, 3), 16);
  const g = parseInt(hexColor.slice(3, 5), 16);
  const b = parseInt(hexColor.slice(5, 7), 16);

  const gray = 0.3 * r + 0.6 * g + 0.1 * b;
  const blueYellow = 0.4 * g + 0.6 * b;

  const newR = gray;
  const newG = blueYellow / 2;
  const newB = blueYellow;

  const dogR = Math.max(0, Math.min(255, Math.round(newR)));
  const dogG = Math.max(0, Math.min(255, Math.round(newG)));
  const dogB = Math.max(0, Math.min(255, Math.round(newB)));
  const dogVision = `rgb(${dogR}, ${dogG}, ${dogB})`;

  let visibility = "low";
  let isVisible = false;

  if (blueYellow > 80) {
    visibility = "high";
    isVisible = true;
  } else if (blueYellow > 40) {
    visibility = "medium";
    isVisible = true;
  }

  return { dogVision, visibility, isVisible };
}

遇到的挑战与解决方案

  • 颜色转换算法: 如何简化颜色转换算法以模拟狗狗视觉,同时又能保持较好的视觉效果,这是我最大的挑战。我通过不断的尝试和调整算法参数来找到最佳方案。
  • 组件之间的配合: 如何让 HexColorPickerInput 组件协同工作,确保颜色状态实时同步,我也花费了一些时间。
  • 性能优化: 对于用户频繁更改颜色的情况,我做了颜色转换的性能优化,避免造成卡顿。

总结

这个在线狗狗颜色视觉工具是我将技术与兴趣结合的一次实践。它不仅展示了 React 和 NextUI 的强大功能,也让我更深入地理解了颜色感知和视觉模拟的原理。如果你对前端开发或者颜色视觉有兴趣,希望我的分享能给你一些启发。

在线体验

在线狗狗颜色视觉检测工具

标签:颜色,狗狗,颜色视觉,组件,const,工具,Math
From: https://www.cnblogs.com/meetqy/p/18656857

相关文章

  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之21 项目主页
    本文要点基于RESTful风格设计一个“为AI聊天工具添加一个知识树系统”的项目主页本项目(为AI聊天工具添加一个知识树系统)的主页页面的三个页面版块(注:一个项目的基础版本,它明确给出建模限制what(where,how)并悬置模型本身(内部空出模型--内建,留给内部--待建+持续增强)同......
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之22 PIN Lang
    本文提要前面一篇给出了本项目的主页页面及其三个page的内容模型及程序。本篇我们继续在更完整的视野中给出本项目的三级参数(通用建模参数)。在这里分别是为“知识树”的三级节点(根茎叶。其中叶子级节点有一个三嵌套的内容模型--就是刚才讨论的三种page的嵌套它们......
  • C#语言的软件开发工具
    C#语言的软件开发工具C#语言作为一种现代化的编程语言,凭借其强大的功能和丰富的生态系统,在软件开发领域得到了广泛的应用。随着C#语言的发展,越来越多的开发工具应运而生。本文将详细介绍C#语言常用的开发工具,包括集成开发环境(IDE)、版本控制工具、测试框架及其他辅助工具,帮......
  • Ruby语言的软件开发工具
    Ruby语言的软件开发工具概述引言Ruby是一种简单且功能强大的编程语言,它以优雅的语法和灵活性而闻名。自1995年首次发布以来,Ruby已经被广泛应用于各种开发领域,特别是Web开发。随着Ruby语言的普及,相关的开发工具也日益丰富。本文将探讨一些常用的Ruby开发工具,帮助开发者更高......
  • uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款
    uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款等功能,界面漂亮颜值高,视频商城小工具等,蚂蚁森林种树养鸡农场偷菜样样齐用于视频,商城,直播,聊天等sumer-alipay介绍uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝......
  • 全能下载工具Motrix
    软件介绍Motrix是一款免费开源的全能下载工具,支持多种下载协议,包括HTTP、FTP、BT种子、磁力链接等。它基于Aria2下载器开发,因此具备高效的下载速度和多线程下载能力。Motrix的界面设计简洁美观,操作直观易用,并且支持跨平台使用,包括Windows、macOS和Linux。软件特色1、多协议......
  • Java AWT 剪贴板工具类, 支持复制图片、文件等内容到剪贴板
    用法Clipboardclipboard=Toolkit.getDefaultToolkit().getSystemClipboard();clipboard.setContents(XTransferableAdaptor.of("HelloWorld",DataFlavor.stringFlavor),null);工具类如下/***awt剪贴板的工具类,弥补了内置类型不全的问题**......
  • 用 2025 年的工具,秒杀了 2022 年的题目。
    你好呀,我是歪歪。前几天打开知乎的时候,在付费咨询模块,我看到了一个差不多两年半前没有回答的技术问题。其实这个问题问的很清晰了,但是当时我拒绝了:虽然过去快两年半的时间,但是我记得还是比较清楚,当时拒绝的理由是如果让我来回答这个问题,我肯定是首选基于Redis来做。大家想......
  • 【docker系列】可视化Docker 管理工具——Portainer
    1.介绍Portainer是一个可视化的Docker操作界面,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。2.需要环境2.1硬件需......
  • 处理新老科目修改类问题--工具类
    解决的问题对于很对财税的业务系统,修改新老科目比较麻烦。因为报表里面配置了很多公式,里面写了很多老科目,如果一个个手工替换,会耗时较久。我的思路是通过程序来跑这个功能。下面用科目编码来举例。如何修改。准备工作1.首先要有一个新老科目的对照表:老科目新科目66020......