js实现旋转矩形,圆形交集并集差集运算并使用canvas展示

region 使用0代表空 1代表有

result

复制到codepen执行

// 创建三个 Canvas 元素
const intersectionCanvas = document.createElement('canvas');
const unionCanvas = document.createElement('canvas');
const differenceCanvas = document.createElement('canvas');intersectionCanvas.width = unionCanvas.width = differenceCanvas.width = 100;
intersectionCanvas.height = unionCanvas.height = differenceCanvas.height = 100;document.body.appendChild(intersectionCanvas);
document.body.appendChild(unionCanvas);
document.body.appendChild(differenceCanvas);const intersectionCtx = intersectionCanvas.getContext('2d');
const unionCtx = unionCanvas.getContext('2d');
const differenceCtx = differenceCanvas.getContext('2d');// 创建旋转矩形
function createRotatedRect(centerX, centerY, width, height, angle) {const shape = new Array(10000).fill(0); // 100x100 大小的画布for (let i = 0; i < 100; i++) {for (let j = 0; j < 100; j++) {const x = i - centerX;const y = j - centerY;const rotatedX = Math.cos(angle) * x - Math.sin(angle) * y;const rotatedY = Math.sin(angle) * x + Math.cos(angle) * y;if (rotatedX >= -width / 2 && rotatedX <= width / 2 && rotatedY >= -height / 2 && rotatedY <= height / 2) {shape[i * 100 + j] = 1; // 在旋转矩形内部标记为1}}}return shape;
}// 创建形状
const shape1 = createRotatedRect(50, 50, 70, 30, Math.PI / 6); // 创建一个旋转矩形
const shape2 = createShape2(); // 创建一个圆形// 计算交集
const intersection = calculateIntersection(shape1, shape2);
drawBinaryImage(intersectionCtx, intersection, 'green');// 计算并集
const union = calculateUnion(shape1, shape2);
drawBinaryImage(unionCtx, union, 'blue');// 计算差集
const difference = calculateDifference(shape1, shape2);
drawBinaryImage(differenceCtx, difference, 'red');// 创建第二个形状(圆形)
function createShape2() {const shape = new Array(10000).fill(0); // 100x100 大小的画布const centerX = 50, centerY = 50, radius = 25;for (let i = 0; i < 100; i++) {for (let j = 0; j < 100; j++) {const distance = Math.sqrt((i - centerX) ** 2 + (j - centerY) ** 2);if (distance <= radius) {shape[i * 100 + j] = 1; // 在中心创建一个圆形}}}return shape;
}// 计算交集
function calculateIntersection(shape1, shape2) {return shape1.map((pixel, index) => pixel && shape2[index] ? 1 : 0);
}// 计算并集
function calculateUnion(shape1, shape2) {return shape1.map((pixel, index) => pixel || shape2[index] ? 1 : 0);
}// 计算差集
function calculateDifference(shape1, shape2) {return shape1.map((pixel, index) => pixel && !shape2[index] ? 1 : 0);
}// 将二值图绘制到 Canvas 上
function drawBinaryImage(ctx, binaryImage, color) {ctx.fillStyle = color;binaryImage.forEach((pixel, index) => {if (pixel) {const x = index % 100;const y = Math.floor(index / 100);ctx.fillRect(x, y, 1, 1);}});
}

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

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

相关文章

Springboot集成Rabbitmq

Springboot集成Rabbitmq实现请求异步处理 一、Docker部署rabbitmq 1. docker pull rabbitmq:3.7.8rabbitmq为需要拉取的镜像名称&#xff0c;3.7.8为版本号 2. docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:3.7.8运行拉取到的镜像文件&#xff1b;-d…

本人用编译

板子方 修改ip&#xff08;保证板子和主机在同一个网段&#xff09; mount -t nfs -o rw,nolock,nfsvers3 192.168.1.200:/home/violet/nfs get/ 互通的文件在~目录下get文件内 电脑方 使用arm-linux-gnueabihf-gcc 编译

外部提供控制程序

外部提供控制程序 文件编号&#xff1a;XXX 1、目的和适用范围 规范在研发与生产过程中所涉及到的采购、外包行为方式&#xff0c;对外部提供过程和产品进行控制&#xff0c;评估、选择及控制外部提供方&#xff0c;并对采购活动及外包过程进行有效地控制&#xff0c;确保外部…

性能优化(CPU优化技术)ARM Neon 详解

原文来自ARM neon详解 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重…

AI新工具(20240322) 免费试用Gemini Pro 1.5;先进的AI软件工程师Devika;人形机器人Apptronik给你打果汁

✨ 1: Gemini Pro 1.5 免费试用Gemini Pro 1.5 Gemini 1.5 Pro是Gemini系列模型的最新版本&#xff0c;是一种计算高效的多模态混合专家&#xff08;MoE&#xff09;模型。它能够从数百万个上下文Token中提取和推理细粒度信息&#xff0c;包括多个长文档和数小时的视频、音频…

ASP.NET控件

目录 TextBox 控件 Button 控件 HyperLink 控件 CheckBox 控件 RadioButton 控件 ListBox 控件 DropDownList 控件 Repeater 控件 DataList 控件 GridView 控件 RequiredFieldValidator 控件 RangeValidator 控件 CompareValidator 控件 RegularExpressionValidat…

C++读取文本文件中的汉字出现乱码的原因及解决措施

大家好&#xff01; 作者今天在写代码时遇到了读取文本文件中的汉字时出现乱码的情况&#xff0c;所以本文介绍Windows操作系统中&#xff0c;C读取文本文件中的汉字出现乱码情况原因及解决措施。 下面代码可以读取Stu.txt中的内容并输出&#xff1a; ifstream ifs; ifs.open(…

拌合楼管理软件开发(十一) 海康威视车牌识别摄像头安装调试,记录犯经验主义错误不断自己打脸过程

前言: 从小白开始 海康威视的摄像头接触过,包括前面也都开发了调用sdk开发拍照和视频预览,以及通过事件警报获取数据的。接触到的像头都是12v或者24v电源&#xff0c;或者是POE供电的&#xff0c;先入为主了觉得都是这样&#xff0c;结果打脸了。 一、设备选型&#xff1a; 最开…

MySQL 经典练习 50 题 (记录)

前言&#xff1a; 记录一下sql学习&#xff0c;仅供参考基本都对了&#xff0c;不排除有些我做的太快做错了。里面sql不存在任何sql优化操作&#xff0c;只以完成最后输出结果为目的&#xff0c;包含我做题过程和思路最后一行才是结果。 1.过程: 1.1.插入数据 /* SQLyog Ul…

【机器学习入门 】人工神经网络(一)

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 文章目录 系列文章目录前言一、多层感知机二、反向传播算法三、深度神经网络 前言 人工神经网络( Artifical Neural Netw…

蓝桥杯-02-2023蓝桥杯c/c++省赛B组题目

参考 2023 年第十四届蓝桥杯 C/C B组省赛题解 2023蓝桥杯c/c省赛B组题目(最全版)&#xff1a; A&#xff1a;日期统计 这题方法应该很多&#xff0c;没有和别人讨论想法。我的解法思路是&#xff1a;先 load 函数生成所有这一年的合法日期&#xff0c;然后枚举所有可以从数据…

node和npm yarn包管理工具

node和包管理工具 今日目标&#xff1a; 1.dos常用指令 2.node的模块化 3.npm包管理工具 4.yarn的常用指令 5.node的内置模块 00-回顾 # Promose:作用&#xff1a;解决ajax请求响应顺序不可控的问题特性&#xff1a;1. Promise是一个构造函数&#xff0c;需要通过new关…

uni-app打包证书android

Android平台打包发布apk应用&#xff0c;需要使用数字证书&#xff08;.keystore文件&#xff09;进行签名&#xff0c;用于表明开发者身份。 Android证书的生成是自助和免费的&#xff0c;不需要审批或付费。 可以使用JRE环境中的keytool命令生成。 以下是windows平台生成证…

MySQL、Oracle的时间类型字段自动更新:insert插入、update更新时,自动更新时间戳。设置自增主键id,oracle创建自增id序列和触发器

1. MySQL 支持设置自增id的字段类型&#xff1a;int、bigint、double等数值类型&#xff0c;一般用int、bigint支持设置自动更新时间的字段类型&#xff1a;datetime、timestamp下面sql中的now()函数可以用current_timestamp()替代 1.1. 不指定秒精度 drop table if exists …

Ollama 在本地快速部署大型语言模型,可进行定制并创建属于您自己的模型

# Ollama 在本地快速部署并运行大型语言模型。 macOS 点击下载 Windows 预览版 点击下载 Linux curl -fsSL https://ollama.com/install.sh | sh手动安装指南 Docker 官方的 Ollama Docker 镜像 ollama/ollama 已经在 Docker Hub 上发布。 库 ollama-pythonollama-js…

超详细测试项目——Web电商项目测试点整理.....

虽然说近些年来&#xff0c;软件测试找工作的时候&#xff0c;简历中如果写着电商项目被认为是烂大街的项目&#xff0c;甚至受到根本不了解行情的HR或者部分公司的技术人员的刁难&#xff0c;但是&#xff1a;电商这么流行普遍的项目和应用&#xff0c;这不是很正常么&#xf…

阿里云2核4G云服务器165元一年,ECS u1优惠价格199元一年

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

浅谈数据治理之道 数据采集(二)

数据采集是数据治理过程中的一个非常关键和重要地环节&#xff0c;不仅关系到数据的及时性、准确性、完整性和有效性等&#xff0c;还涉及到数据的安全和隐私。其次&#xff0c;涉及到从各种数据源获取原始数据&#xff0c;并将其转换为适合进一步处理和分析的格式。今天 咱们就…

如何从小白,到掌握Python

作为前端开发人员想要掌握Python编程语言&#xff0c;以下是一个学习路径建议&#xff1a; ### 初级阶段&#xff1a; 1. **学习Python基础&#xff1a;** - 学习Python的基本语法、数据类型、流程控制等基础知识。 - 可以通过在线教程、书籍或视频课程来学习&#xff…

Android单片机硬件通信《GPIO通信》

一、什么是GPIO? GPIO&#xff08;英语&#xff1a;General-purpose input/output&#xff09;&#xff0c;通用型输入输出端口&#xff0c;在单片机上一般是通过一个GND引脚和若干个io引脚配合工作。 单片机可以配置GPIO输入输出模式,与外界环境进行通信交互。在输入环境下&…