【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

相关文章

【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) # 大

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

Excel绘制CDF图

对如下20个原始数据绘制cdf图 1. 对数据进行排序,从小到大 2. 计算累积分布: 计算公式为: 然后对C3下拉,得到累积分布数据。 3. 选中B、C两列绘制散点图:

(4)SVG-path中的椭圆弧A(绝对)或a(相对)

1、概念 表示经过起始点(即上一条命令的结束点),到结束点之间画一段椭圆弧 2、7个参数 rx,ry,x-axis-rotation,large-arc-flag,sweep-flag,x,y (1)和(2)rx,ry rx:椭圆的x轴半径(即水平半径) ry:椭圆的y轴半径(即垂直半径) 这两个参数好理解,就是椭圆的两条对称轴半径,相等即为圆 也可以写比例,写比例时默认用符合条件

【python 图像绘制】图像绘制知识总结

颜色图谱 具体颜色描述autumn 红橙黄cool 青-洋红copper 黑-铜flag 红-白-蓝-黑gray 黑-白hot 黑-红-黄-白hsv hsv颜色空间, 红-黄-绿-青-蓝-洋红-红inferno 黑-红-黄jet 蓝-青-黄-红magma 黑-红-白pink 黑-粉-白plasma 绿-红-黄prism 红-黄-