当前位置: 首页 > wzjs >正文

Php做网站要求logo设计公司价格

Php做网站要求,logo设计公司价格,鞍山公司网站建设,wordpress 比较以下是使用OpenLayers根据任意数量控制点绘制贝塞尔曲线的完整实现方案。该方案支持三个及以上控制点,使用递归算法计算高阶贝塞尔曲线。 实现思路 贝塞尔曲线原理:使用德卡斯特里奥算法(De Casteljau’s Algorithm)递归计算任意…

以下是使用OpenLayers根据任意数量控制点绘制贝塞尔曲线的完整实现方案。该方案支持三个及以上控制点,使用递归算法计算高阶贝塞尔曲线。

实现思路

  1. 贝塞尔曲线原理:使用德卡斯特里奥算法(De Casteljau’s Algorithm)递归计算任意阶贝塞尔曲线。
  2. 坐标转换:将WGS 84经纬度点转换为Web Mercator投影(EPSG:3857)。
  3. 曲线计算:通过递归算法计算曲线上的多个点,形成平滑曲线。
  4. 地图渲染:使用OpenLayers的LineString几何对象绘制曲线。

代码实现

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>OpenLayers多控制点贝塞尔曲线</title><script src="https://cdn.jsdelivr.net/npm/ol@7.3.0/dist/ol.js"></script><link href="https://cdn.jsdelivr.net/npm/ol@7.3.0/ol.css" rel="stylesheet"><style>.map {width: 100%;height: 400px;}</style>
</head>
<body><div id="map" class="map"></div><script>// 1. 定义多个控制点(经纬度坐标)const controlPoints = [[116.3, 39.9],    // 北京[118.0, 37.5],    // 黄海海域[121.0, 35.0],    // 东海海域[122.0, 32.0],    // 控制点[121.4, 31.2]     // 上海];// 2. 经纬度转Web Mercator投影const transformPoints = (points) => {return points.map(point => ol.proj.transform(point, 'EPSG:4326', 'EPSG:3857'));};// 3. 递归计算贝塞尔曲线上的点(德卡斯特里奥算法)function deCasteljau(points, t) {if (points.length === 1) return points[0];const newPoints = [];for (let i = 0; i < points.length - 1; i++) {const x = (1 - t) * points[i][0] + t * points[i + 1][0];const y = (1 - t) * points[i][1] + t * points[i + 1][1];newPoints.push([x, y]);}return deCasteljau(newPoints, t);}// 4. 计算完整贝塞尔曲线function calculateBezierCurve(points, segments = 50) {const curvePoints = [];for (let t = 0; t <= 1; t += 1 / segments) {curvePoints.push(deCasteljau(points, t));}return curvePoints;}// 5. 转换坐标并计算贝塞尔曲线const mercatorPoints = transformPoints(controlPoints);const bezierPoints = calculateBezierCurve(mercatorPoints, 100);// 6. 创建地图const map = new ol.Map({target: 'map',layers: [new ol.layer.Tile({source: new ol.source.OSM()})],view: new ol.View({center: ol.proj.transform([119, 34], 'EPSG:4326', 'EPSG:3857'),zoom: 5})});// 7. 创建贝塞尔曲线要素const bezierCurve = new ol.geom.LineString(bezierPoints);const feature = new ol.Feature({geometry: bezierCurve,name: '贝塞尔曲线'});// 8. 设置曲线样式feature.setStyle(new ol.style.Style({stroke: new ol.style.Stroke({color: 'rgba(255, 0, 0, 0.8)',width: 3,lineDash: [10, 5]})}));// 9. 添加曲线到地图const vectorSource = new ol.source.Vector({features: [feature]});const vectorLayer = new ol.layer.Vector({source: vectorSource});map.addLayer(vectorLayer);// 10. 添加控制点标记controlPoints.forEach((point, index) => {const mercatorPoint = ol.proj.transform(point, 'EPSG:4326', 'EPSG:3857');const marker = new ol.Feature({geometry: new ol.geom.Point(mercatorPoint),name: `控制点${index + 1}`});marker.setStyle(new ol.style.Style({image: new ol.style.Circle({radius: 6,fill: new ol.style.Fill({ color: 'blue' }),stroke: new ol.style.Stroke({ color: 'white', width: 2 })}),text: new ol.style.Text({text: `控制点${index + 1}`,font: '14px Arial',fill: new ol.style.Fill({ color: 'black' }),stroke: new ol.style.Stroke({ color: 'white', width: 2 }),offsetY: -10})}));vectorSource.addFeature(marker);});</script>
</body>
</html>

核心代码解析

  1. 德卡斯特里奥算法

    • 递归计算贝塞尔曲线上的点,支持任意数量的控制点
    • 公式:( B(t) = (1-t)B_{0}^{n-1}(t) + tB_{1}^{n-1}(t) )
    • 时间复杂度:( O(n^2) ),n为控制点数量
  2. 坐标转换

    • 使用ol.proj.transform()确保所有点在同一投影系统下
  3. 曲线精度控制

    • segments参数控制曲线的平滑度,值越大曲线越平滑但性能开销更高

效果展示

在这里插入图片描述

(注:实际运行时会显示OpenStreetMap底图和红色贝塞尔曲线)


文章转载自:

http://fxy5sblo.zqxhn.cn
http://eerO76mT.zqxhn.cn
http://fG7WI1VX.zqxhn.cn
http://lsZZbDkj.zqxhn.cn
http://2qIZv8Gm.zqxhn.cn
http://t8myxTCb.zqxhn.cn
http://3qbSxLcn.zqxhn.cn
http://JlnQvSMj.zqxhn.cn
http://KKDi1CXi.zqxhn.cn
http://FTedU2Ek.zqxhn.cn
http://PD62juBH.zqxhn.cn
http://SARc8E1R.zqxhn.cn
http://IDv97gTU.zqxhn.cn
http://W5yQxXLK.zqxhn.cn
http://xUnBafvw.zqxhn.cn
http://7vmcbAmv.zqxhn.cn
http://oSbwpe11.zqxhn.cn
http://e9K4ZQfx.zqxhn.cn
http://S46hJXHc.zqxhn.cn
http://OLyuBu0X.zqxhn.cn
http://AChSoybH.zqxhn.cn
http://S0mgoReh.zqxhn.cn
http://mlZYOPna.zqxhn.cn
http://RHfeYlCs.zqxhn.cn
http://jGCWq7sD.zqxhn.cn
http://IDNLxmeA.zqxhn.cn
http://1UuoKCAU.zqxhn.cn
http://NY7Atnu7.zqxhn.cn
http://zAGEYIqF.zqxhn.cn
http://XaBljVEN.zqxhn.cn
http://www.dtcms.com/wzjs/765302.html

相关文章:

  • 网站公司开发淮安专业网站建设
  • 企业网站素材图片有人做网站推广吗
  • 360中小网站建设网站不设置关键词描述
  • 网站建设怎样避免犯法高端大气企业网站
  • 网站打开速度慢是否需要升级带宽舟山市建设信息港网站
  • 网站qq未启用自己注册域名
  • 智能建站程序提高网站浏览量
  • 手机网站建设图监控做斗鱼直播网站
  • 中网建站四川建设工程招标网
  • 帮助做问卷调查的网站禁止同ip网站查询
  • 网站永久免费建站查网站备案名称
  • 网络培训学校网站优化外包服务
  • 企业网站建设报价清单wordpress快捷登录
  • .net网站开发实训代码大型旅行社自建网站
  • 网站建设介绍会发言稿微信公众号怎么推广和引流
  • 公司建设网站的案例分析WordPress都可以做什么
  • 无锡网站推广优化公司哪家好注册自媒体账号平台
  • 教育网站开发报告住建厅官网证件查询
  • 专门做企业名录的网站河南网站建设途径有什么
  • 公司网站简介怎么做医院网站建设好处
  • 吉林市网站建设公司哪家好南京外贸网站建设公司
  • 类似美团网的网站是怎么做的wordpress文章分类插件
  • 完整网站开发步骤wordpress怎么安装?
  • 如何做一个营销型网站做网站找个人还是找公司好
  • 深圳做网站得外包公司有哪些网站更新了
  • 外贸公司网站梧州论坛手机红豆网
  • 东莞百度seo新网站快速排名笔记本可以做网站吗
  • 沧州网站设计公司价格官网搭建平台
  • 做中介开什么网站上海网站设计方案
  • 怎么自己做网站服务器专门做颜料的网站