【Canvas技法】用椭圆绘制经纬线

2024-04-06 09:44

本文主要是介绍【Canvas技法】用椭圆绘制经纬线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【图示】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>用椭圆绘制经纬线</title><style type="text/css">.centerlize{margin:0 auto;width:1200px;}</style></head><body οnlοad="init();"><div class="centerlize"><canvas id="myCanvas" width="512px" height="512px" style="border:1px dotted black;">如果看到这段文字说您的浏览器尚不支持HTML5 Canvas,请更换浏览器再试.</canvas></div></body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 将全体代码(从<!DOCTYPE到script>)拷贝下来,粘贴到文本编辑器中,
* 另存为.html文件,再用chrome浏览器打开,就能看到实现效果。
******************************************************************/// canvas的绘图环境
var ctx;// 高宽
const WIDTH=512;
const HEIGHT=512;// 舞台对象
var stage;//-------------------------------
// 初始化
//-------------------------------
function init(){// 获得canvas对象var canvas=document.getElementById('myCanvas');  canvas.width=WIDTH;canvas.height=HEIGHT;// 初始化canvas的绘图环境ctx=canvas.getContext('2d');  ctx.translate(WIDTH/2,HEIGHT/2);// 原点平移到画布中央// 准备stage=new Stage();    stage.init();// 开幕animate();
}// 播放动画
function animate(){    stage.update();    stage.paintBg(ctx);stage.paintFg(ctx);     // 循环if(true){window.requestAnimationFrame(animate);   }
}// 舞台类
function Stage(){// 初始化this.init=function(){}// 更新this.update=function(){}// 画背景this.paintBg=function(ctx){ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 清屏    //外缘ctx.beginPath();ctx.arc(0,0,240,0,Math.PI*2,true);ctx.lineWidth=0.2;ctx.strokeStyle="black";ctx.stroke();ctx.closePath();//--- 以下为纬线drawTuoYuan(ctx,0,196,264,46.5);ctx.lineWidth=0.5;ctx.strokeStyle="red";ctx.stroke();drawTuoYuan(ctx,0,166,340,60);ctx.lineWidth=0.5;ctx.strokeStyle="green";ctx.stroke();drawTuoYuan(ctx,0,136,390,68.8);ctx.lineWidth=0.5;ctx.strokeStyle="navy";ctx.stroke();drawTuoYuan(ctx,0,106,426,68.8);ctx.lineWidth=0.5;ctx.strokeStyle="purple";ctx.stroke();drawTuoYuan(ctx,0,76,454,80.1);ctx.lineWidth=0.5;ctx.strokeStyle="fuchsia";ctx.stroke();drawTuoYuan(ctx,0,36,474,83.6);ctx.lineWidth=0.5;ctx.strokeStyle="maroon";ctx.stroke();drawTuoYuan(ctx,0,0,480,84.7);ctx.lineWidth=0.5;ctx.strokeStyle="black";ctx.stroke();drawTuoYuan(ctx,0,-36,474,83.6);ctx.lineWidth=0.5;ctx.strokeStyle="maroon";ctx.stroke();drawTuoYuan(ctx,0,-76,454,80.1);ctx.lineWidth=0.5;ctx.strokeStyle="fuchsia";ctx.stroke();drawTuoYuan(ctx,0,-106,426,68.8);ctx.lineWidth=0.5;ctx.strokeStyle="purple";ctx.stroke();drawTuoYuan(ctx,0,-136,390,68.8);ctx.lineWidth=0.5;ctx.strokeStyle="navy";ctx.stroke();drawTuoYuan(ctx,0,-166,340,60);ctx.lineWidth=0.5;ctx.strokeStyle="green";ctx.stroke();drawTuoYuan(ctx,0,-196,264,46.5);ctx.lineWidth=0.5;ctx.strokeStyle="red";ctx.stroke();//--- 以下为经线drawTuoYuan(ctx,0,0,40,480);ctx.lineWidth=0.2;ctx.strokeStyle="black";ctx.stroke();drawTuoYuan(ctx,0,0,200,480);ctx.lineWidth=0.2;ctx.strokeStyle="black";ctx.stroke();drawTuoYuan(ctx,0,0,360,480);ctx.lineWidth=0.2;ctx.strokeStyle="black";ctx.stroke();// 作者ctx.textBaseline="bottom";ctx.textAlign="center";ctx.font = "8px consolas";ctx.fillStyle="black";ctx.fillText("逆火原创",WIDTH/2-40,HEIGHT/2-10);}// 画前景this.paintFg=function(ctx){}
}/*------------------------------------------------------------------------函数:drawEllipse函数的套娃函数ctx:绘图上下文x:椭圆中心点横坐标y:椭圆中心点纵坐标width:椭圆宽height:椭圆高
------------------------------------------------------------------------*/
function drawTuoYuan(ctx,x,y,width,height){drawEllipse(ctx,x-width/2,y-height/2,width,height);
}/*------------------------------------------------------------------------函数:使用贝塞尔三次曲线拟近椭圆,该方法比原生的ellipse函数消耗小很多。ctx:绘图上下文x:椭圆左极点横坐标(注意不是中心点)y:椭圆左极点纵坐标(注意不是中心点)width:椭圆宽height:椭圆高注:该方法摘录自 张磊著《HTML5实验室-Canvas世界》,电子工业出版社出版
------------------------------------------------------------------------*/
function drawEllipse(ctx,x,y,width,height){var k=0.55228475;var ox=(width/2)*k;var oy=(height/2)*k;var xe=x+width;var ye=y+height;var xm=x+width/2;var ym=y+height/2;ctx.beginPath();ctx.moveTo(x,ym);ctx.bezierCurveTo(x,ym-oy,xm-ox,y,xm,y);ctx.bezierCurveTo(xm+ox,y,xe,ym-oy,xe,ym);ctx.bezierCurveTo(xe,ym+oy,xm+ox,ye,xm,ye);ctx.bezierCurveTo(xm-ox,ye,x,ym+oy,x,ym);ctx.closePath();
}/*---------------------------------------------
阿富汗的政权更迭,
本质上是一个壮大的本土宗教兼军阀组织,
对美帝国主义扶植的官僚买办集团的驱逐,
并不是一场解放性质的人民革命。
该组织总把前朝说得很黑暗,把世界说得很腐朽堕落,
然后把自己美化成救世主,
只要交税、上供、跟我走,
就能带你飞......
----------------------------------------------*/
//-->
</script>

END

这篇关于【Canvas技法】用椭圆绘制经纬线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879608

相关文章

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大