JS-圆,椭圆等轨迹相关算法

article/2025/1/15 17:59:27

公式
(x0, y0) 圆心坐标
r:半径
x = x0 + cos(angle) * r
y = y0 + sin(angle) * r

1、轨迹

    <div id="div" style="position:relative; width: 20px; height: 20px; background: cadetblue;"></div><script>/*** 圆心 (x0, y0)* 坐标* x1 = x0 + cos(angle * Math.PI / 180) * r* y1 = y0 + sin(angle * Math.PI / 180) * r*/const div = document.querySelector('#div');const x0 = 300;const y0 = 400;const r = 100;let angle = 0;let x = x0 + Math.cos(angle) * r;let y = y0 + Math.sin(angle) * r;div.style.top = `${y}px`;div.style.left = `${x}px`;setInterval(() => {angle += 1;x = x0 + Math.cos(angle * Math.PI / 180) * r;y = y0 + Math.sin(angle * Math.PI / 180) * r;div.style.top = `${y}px`;div.style.left = `${x}px`;}, 10);</script>

2、轨迹分布

<style>body {margin: 0;padding: 0;height: 100vh;}.item {position: absolute;width: 20px;height: 20px;}
</style><div style="position: relative;display: flex;justify-content: center;height: 100%; align-items: center;"><div class="item" style="background-color: red;"></div><div class="item" style="background-color: rgb(255, 170, 0);"></div><div class="item" style="background-color: rgb(0, 157, 255);"></div><div class="item" style="background-color: rgb(0, 81, 255);"></div><div class="item" style="background-color: rgb(0, 255, 115);"></div><div class="item" style="background-color: rgb(187, 255, 0);"></div><div class="item" style="background-color: red;"></div><div class="item" style="background-color: rgb(255, 170, 0);"></div><div class="item" style="background-color: rgb(0, 157, 255);"></div><div class="item" style="background-color: rgb(0, 81, 255);"></div><div class="item" style="background-color: rgb(0, 255, 115);"></div><div class="item" style="background-color: rgb(187, 255, 0);"></div></div><script>/*** 圆心 (x0, y0)* 坐标* x1 = x0 + cos(angle * Math.PI / 180) * r* y1 = y0 + sin(angle * Math.PI / 180) * r*/const div = document.querySelectorAll('.item');const amount = div.length;const x0 = 300;const y0 = 400;const r = 100;const single = 360 / amount;for (let i = 0; i < amount; i++) {const x = x0 + Math.cos(single * i * Math.PI / 180) * r - 10;const y = y0 + Math.sin(single * i * Math.PI / 180) * r - 10;div[i].style.left = `${x}px`;div[i].style.top = `${y}px`;}</script>

3、圆形旋转样例

// 以下代码只适用于节点为偶数个
<style>body {margin: 0;padding: 0;height: 100vh;}.item {position: absolute;width: 20px;font-size: 22px;color: rgb(45, 234, 105);text-align: center;}.content {position: absolute;width: 100px;height: 100px;background-color: antiquewhite;top: 350px;left: 250px;text-align: center;line-height: 100px;border-radius: 50%;font-size: 30px;color: aqua;}
</style><body><div style="position: relative;display: flex;justify-content: center;height: 100%; align-items: center;"><div class="content" id="content"></div><div id="item0" class="item" data-id="item-0"><div id="item-0" style="background-color: red;"></div>0</div><div id="item1" class="item" data-id="item-1"><div id="item-1" style="background-color: rgb(255, 170, 0);"></div>1</div><div id="item2" class="item" data-id="item-2"><div id="item-2" style="background-color: rgb(0, 157, 255);"></div>2</div><div id="item3" class="item" data-id="item-3"><div id="item-3" style="background-color: rgb(0, 81, 255);"></div>3</div><div id="item4" class="item" data-id="item-4"><div id="item-4" style="background-color: rgb(0, 255, 115);"></div>4</div><div id="item5" class="item" data-id="item-5"><div id="item-5" style="background-color: rgb(187, 255, 0);"></div>5</div><div id="item6" class="item" data-id="item-6"><div id="item-6" style="background-color: red;"></div>6</div><div id="item7" class="item" data-id="item-7"><div id="item-7" style="background-color: rgb(255, 170, 0);"></div>7</div><div id="item8" class="item" data-id="item-8"><div id="item-8" style="background-color: rgb(0, 157, 255);"></div>8</div><div id="item9" class="item" data-id="item-9"><div id="item-9" style="background-color: rgb(0, 81, 255);"></div>9</div><div id="item10" class="item" data-id="item-10"><div id="item-10" style="background-color: rgb(0, 255, 115);"></div>10</div><div id="item11" class="item" data-id="item-11"><div id="item-11" style="background-color: rgb(187, 255, 0);"></div>11</div></div><script>/*** 圆心 (x0, y0)* 坐标* x1 = x0 + cos(angle) * r* y1 = y0 + sin(angle) * r*/const div = document.querySelectorAll('.item');const amount = div.length;/*** 圆心坐标* 半径* @type {number}*/const x0 = 300;const y0 = 400;const r = 200;// 旋转角度const single = 360 / amount;// 中间显示内容判断let judgeXY = 0;let fontSizeList = [];function init() {for (let i = 0; i < amount; i++) {const ele = div[i];const angle = single * i * Math.PI / 180;const {x, y, sin} = getLocalInfo(i, angle);const fontSize = 22 + sin * 10;fontSizeList.push({i,fontSize});changeDom(ele, sin, angle, x, y, fontSize);}// 判断是否为最前面的元素fontSizeList.sort((a, b) => b.fontSize - a.fontSize);const {i, fontSize} = fontSizeList[0];document.querySelector('#content').innerText = div[i].innerText;judgeXY = fontSize;}// 循环方法function loop() {for (let i = 0; i < amount; i++) {const ele = div[i];const oldAngle = +ele.getAttribute('angle');const angle = single * Math.PI / 180;const newAngle = oldAngle - angle;const {x, y, sin} = getLocalInfo(i, newAngle);const fontSize = 22 + sin * 10;// 处理元素changeDom(ele, sin, newAngle, x, y, fontSize);// 控制显示信息if (fontSize === judgeXY) {document.querySelector('#content').innerText = ele.innerText;}}}/*** 获取坐标和缩放比* */function getLocalInfo(i, angle) {// 调整第一个元素在正下方 多余加90度const rotate = angle + Math.PI / 2;const x = x0 + Math.cos(rotate) * r - 10;const y = y0 + Math.sin(rotate) * r - 10;// 近大远小去处理const sin = +Math.sin(rotate).toFixed(3);return {x,y,sin}}/*** 这里应该通过 transform: scale() 来控制元素大小*/function changeDom(ele, sin, newAngle, x, y, fontSize) {const id = ele.dataset.id;// 父元素ele.style.fontSize = `${fontSize}px`;ele.setAttribute('angle', newAngle);ele.style.left = `${x}px`;ele.style.top = `${y}px`;// 子元素const contentDom = document.querySelector(`#${id}`);contentDom.style.width = `${20 + sin * 10}px`;contentDom.style.height = `${20 + sin * 10}px`;contentDom.style.margin = `0 auto`}init();setInterval(loop, 2000);</script>
</body>

在这里插入图片描述

椭圆

由圆轨迹公式可得出x = x0 + Math.cos(angle) * rx;y = y0 + Math.sin(angle) * ry;rx、ry分别为x轴上的焦半径,y轴的焦半径
// 以下代码只适用于节点为偶数个body {margin: 0;padding: 0;height: 100vh;}.item {position: absolute;width: 20px;font-size: 22px;color: rgb(45, 234, 105);text-align: center;}.content {position: absolute;width: 100px;height: 100px;background-color: antiquewhite;top: 350px;left: 550px;text-align: center;line-height: 100px;border-radius: 50%;font-size: 30px;color: aqua;}
</style><body><div style="position: relative;display: flex;justify-content: center;height: 100%; align-items: center;"><div class="content" id="content"></div><div id="item0" class="item" data-id="item-0"><div id="item-0" style="background-color: red;"></div>0</div><div id="item1" class="item" data-id="item-1"><div id="item-1" style="background-color: rgb(255, 170, 0);"></div>1</div><div id="item2" class="item" data-id="item-2"><div id="item-2" style="background-color: rgb(0, 157, 255);"></div>2</div><div id="item3" class="item" data-id="item-3"><div id="item-3" style="background-color: rgb(0, 81, 255);"></div>3</div><div id="item4" class="item" data-id="item-4" onclick="clickNode(this)"><div id="item-4" style="background-color: rgb(0, 255, 115);"></div>4</div><div id="item5" class="item" data-id="item-5"><div id="item-5" style="background-color: rgb(187, 255, 0);"></div>5</div><div id="item6" class="item" data-id="item-6"><div id="item-6" style="background-color: red;"></div>6</div><div id="item7" class="item" data-id="item-7"><div id="item-7" style="background-color: rgb(255, 170, 0);"></div>7</div><div id="item8" class="item" data-id="item-8"><div id="item-8" style="background-color: rgb(0, 157, 255);"></div>8</div><div id="item9" class="item" data-id="item-9"><div id="item-9" style="background-color: rgb(0, 81, 255);"></div>9</div><div id="item10" class="item" data-id="item-10"><div id="item-10" style="background-color: rgb(0, 255, 115);"></div>10</div><div id="item11" class="item" data-id="item-11"><div id="item-11" style="background-color: rgb(187, 255, 0);"></div>11</div></div><script>/*** 椭圆中心点 (x0, y0)* 坐标* x1 = x0 + cos(angle) * rx* y1 = y0 + sin(angle) * ry*/const div = document.querySelectorAll('.item');const amount = div.length;/*** 椭圆中心点坐标* 半径* @type {number}*/const x0 = 600;const y0 = 400;const rx = 400;const ry = 200;// 旋转角度const single = 360 / amount;// 中间显示内容判断let judgeXY = 0;let fontSizeList = [];function init() {for (let i = 0; i < amount; i++) {const ele = div[i];const angle = single * i * Math.PI / 180;const {x, y, sin} = getLocalInfo(i, angle);const fontSize = 22 + sin * 10;fontSizeList.push({i,fontSize});changeDom(ele, sin, angle, x, y, fontSize);}// 判断是否为最前面的元素fontSizeList.sort((a, b) => b.fontSize - a.fontSize);const {i, fontSize} = fontSizeList[0];document.querySelector('#content').innerText = div[i].innerText;judgeXY = fontSize;}function loop() {for (let i = 0; i < amount; i++) {const ele = div[i];const oldAngle = +ele.getAttribute('angle');const angle = single * Math.PI / 180;const newAngle = oldAngle - angle;const {x, y, sin} = getLocalInfo(i, newAngle);const fontSize = 22 + sin * 10;// 处理元素changeDom(ele, sin, newAngle, x, y, fontSize);// 控制显示信息if (fontSize === judgeXY) {document.querySelector('#content').innerText = ele.innerText;}}}/*** 获取坐标和缩放比* */function getLocalInfo(i, angle) {// 调整第一个元素在正下方const rotate = angle + Math.PI / 2;const x = x0 + Math.cos(rotate) * rx - 10;const y = y0 + Math.sin(rotate) * ry - 10;// 近大远小去处理const sin = +Math.sin(rotate).toFixed(3);return {x,y,sin}}/*** 这里应该通过 transform: scale() 来控制元素大小*/function changeDom(ele, sin, newAngle, x, y, fontSize) {const id = ele.dataset.id;// 父元素ele.style.fontSize = `${fontSize}px`;ele.setAttribute('angle', newAngle);ele.style.left = `${x}px`;ele.style.top = `${y}px`;// 子元素const contentDom = document.querySelector(`#${id}`);contentDom.style.width = `${20 + sin * 10}px`;contentDom.style.height = `${20 + sin * 10}px`;contentDom.style.margin = `0 auto`}init();setInterval(loop, 2000);

在这里插入图片描述


http://chatgpt.dhexx.cn/article/8eroy13y.shtml

相关文章

精确绘制椭圆

本文首发于微信公众号「3D视觉工坊」。 前言 圆特征在测量领域中应用广泛&#xff0c;比如&#xff1a;相机标定、位姿估计、目标跟踪等方面。圆经过透视投影&#xff0c;当成像平面与圆平面不平行时&#xff0c;圆经过透视投影为椭圆&#xff0c;圆心的透视投影点与椭圆的中…

cesium椭圆编辑椭圆修改(cesium篇.78)

听老人家说:多看美女会长寿 地图之家总目录(订阅之前必须先查看该博客) 完整代码工程包下载 运行如有问题,可“私信”博主。效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en

JS小球绕着椭圆形的轨迹旋转并且近大远小

在ivx中案例如下&#xff1a; VxEditor 效果如下&#xff0c;近大远小 主要代码如下&#xff1a; const centerX 360 / 2; // 椭圆中心的X坐标 const centerY 120 / 2; // 椭圆中心的Y坐标 const a 100; // 长半轴 const b 60; // 短半轴const elementsWithClassName d…

知识图谱实战应用2-知识图谱的知识融合与知识消歧

大家好,我是微学AI,今天给大家带来知识图谱实战应用2-知识图谱的知识融合与知识消歧。 知识图谱是用于表示语义化信息的一种图形化知识表示形式,其中包含了大量的实体、属性和关系。由于知识图谱是由不同来源的知识组成的,因此可能存在同一实体在不同知识源中有不同的表达…

【知识图谱】深入浅出讲解知识图谱(技术、构建、应用)

本文收录于《深入浅出讲解自然语言处理》专栏&#xff0c;此专栏聚焦于自然语言处理领域的各大经典算法&#xff0c;将持续更新&#xff0c;欢迎大家订阅&#xff01;个人主页&#xff1a;有梦想的程序星空个人介绍&#xff1a;小编是人工智能领域硕士&#xff0c;全栈工程师&a…

知识图谱从入门到应用——知识图谱的知识表示:符号表示方法

分类目录&#xff1a;《知识图谱从入门到应用》总目录 相关文章&#xff1a; 知识图谱的知识表示&#xff1a;基础知识 知识图谱的知识表示&#xff1a;符号表示方法 知识图谱的知识表示&#xff1a;向量表示方法 在前面的文章中已经多次提到&#xff0c;知识图谱采用图的方…

《什么是知识图谱?为什么需要知识图谱?知识图谱有什么应用? - 翔哥带你初识知识图谱》

原创实在不易&#xff0c;欢迎大家关注我微信公众号&#xff1a;阳洋up 我本人主要是做知识图谱表示学习研究的&#xff0c;通过读取大量CCF顶会论文以及与导师的交流沟通&#xff0c;逐渐形成了对知识图谱的大的层面上的一些认知&#xff0c;希望在CSDN平台上分享我的一些学习…

知识图谱从入门到应用——知识图谱的知识表示:向量表示方法

分类目录&#xff1a;《知识图谱从入门到应用》总目录 相关文章&#xff1a; 知识图谱的知识表示&#xff1a;基础知识 知识图谱的知识表示&#xff1a;符号表示方法 知识图谱的知识表示&#xff1a;向量表示方法 前文已经介绍过&#xff0c;向量化的表示已经在人工智能的其…

知识图谱|知识图谱的典型应用

作者&#xff1a; cooldream2009 我们构建知识图谱的目的&#xff0c;在于利用知识图谱来做一些事情。有效利用知识图谱&#xff0c;就是要考虑知识图谱的具备的能力&#xff0c;知识图谱具有哪些能力呢&#xff0c;首先我们知道知识图谱包含了海量的数据&#xff0c;是一个超…

知识图谱入门知识(一)知识图谱应用以及常用方法概述

学习内容 搜集各种博客&#xff0c;理解实体识别、关系分类、关系抽取、实体链指、知识推理等&#xff0c;并且总结各种分类中最常用的方法、思路。 由于自己刚刚接触知识图谱&#xff0c;对该领域的概念和方法的描述还不是很清楚&#xff0c;所以只是简单的列出框架和添加链接…

时空知识图谱应用初探

一、时空知识图谱概述 时空知识图谱不单单是一个“增强型”的开放域知识图谱&#xff0c;而是需要结合业务场景和领域知识&#xff0c;并针对时空知识自身的特点&#xff0c;对知识的概念、实体和关系进行语义化和时空化拓展。时空知识图谱除了描述语义关系外&#xff0c;还需要…

【知识图谱】知识图谱应用

知识图谱怎么用 知识图谱应用场景 辅助搜索——精准回答 eg&#xff1a; 辅助问答——人机互动 eg&#xff1a; 辅助数据集成——智能数据整合 eg&#xff1a; 辅助决策——智能决策 知识图谱和各种AI技术综合使用能更好地发挥AI的作用 eg&#xff1a;wbq为什么选择张…

知识图谱从入门到应用——知识图谱的知识表示:基础知识

分类目录&#xff1a;《知识图谱从入门到应用》总目录 相关文章&#xff1a; 知识图谱的知识表示&#xff1a;基础知识 知识图谱的知识表示&#xff1a;符号表示方法 知识图谱的知识表示&#xff1a;向量表示方法 知识表示是人工智能领域一个较为核心的问题。对于知识表示的…

知识图谱从入门到应用——知识图谱的技术结构

分类目录&#xff1a;《知识图谱从入门到应用》总目录 相关文章&#xff1a; 知识图谱的基础知识 知识图谱的发展 知识图谱的应用 知识图谱的技术结构 知识图谱是交叉技术领域 知识图谱是典型的交叉技术领域。在人工智能和机器学习领域&#xff0c;传统符号知识表示是知识…

知识图谱从入门到应用——知识图谱的发展

分类目录&#xff1a;《知识图谱从入门到应用》总目录 相关文章&#xff1a; 知识图谱的基础知识 知识图谱的发展 知识图谱的应用 知识图谱的技术结构 1945年&#xff0c;美国首任总统科学顾问Vannevar Bush曾提出了一个称为MEMEX的“记忆机器”的设想。他认为人的记忆偏重…

知识图谱从入门到应用——知识图谱的基础知识

分类目录&#xff1a;《知识图谱从入门到应用》总目录 相关文章&#xff1a; 知识图谱的基础知识 知识图谱的发展 知识图谱的应用 知识图谱的技术结构 知识图谱是有学识的人工智能 早期的人工智能有很多持不同观点的流派&#xff0c;其中两个历史比较悠久的流派通常被称为…

知识图谱的应用领域

1.3 知识图谱的价值 知识图谱最早的应用是提升搜索引擎的能力。随后&#xff0c;知识图谱在辅助智能问答、自然语言理解、大数据分析、推荐计算、物联网设备互联、可解释性人工智能等多个方面展现出丰富的应用价值。 1.辅助搜索 互联网的终极形态是万物的互联&#xff0c;而…

最详细的知识图谱的技术与应用

导读&#xff1a;从一开始的Google搜索&#xff0c;到现在的聊天机器人、大数据风控、证券投资、智能医疗、自适应教育、推荐系统&#xff0c;无一不跟知识图谱相关。它在技术领域的热度也在逐年上升。 本文以通俗易懂的方式来讲解知识图谱相关的知识、尤其对从零开始搭建知识图…

知识图谱是什么?一文了解其技术与应用场景案例

导读&#xff1a;悟已往之不谏&#xff0c;知来者之可追。 小编整理了各种关于人工智能的学习资料库&#xff08;知识图谱、图像处理opencv\自然语言处理、机器学习、数学基础等&#xff09;&#xff0c;还有AI大礼包&#xff1a;Pytorch、实战框架视频、图像识别、OpenCV、计算…

言简意赅,盘点知识图谱在各领域的应用

言简意赅&#xff0c;盘点知识图谱在各领域的应用 01 语义匹配02 搜索推荐03 问答对话04 推理决策05 区块链协作 什么是知识图谱&#xff1f;通俗易懂 01 语义匹配 语义匹配是搜索推荐、智能问答和辅助决策的基础。在没有知识图谱以前&#xff0c;文本匹配主要依靠字面匹配为…