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

网站上的公告怎么做参考文献百度关键词搜索排名

网站上的公告怎么做参考文献,百度关键词搜索排名,测试网站各地访问速度,o2o网站模版OpenLayers 精确经过三个点的曲线绘制 根据您的需求,我将提供一个使用 OpenLayers 绘制精确经过三个指定点的曲线解决方案。对于三个点的情况,我们可以使用 二次贝塞尔曲线 或 三次样条插值,确保曲线精确通过所有控制点。 实现方案 下面是…

OpenLayers 精确经过三个点的曲线绘制

根据您的需求,我将提供一个使用 OpenLayers 绘制精确经过三个指定点的曲线解决方案。对于三个点的情况,我们可以使用 二次贝塞尔曲线三次样条插值,确保曲线精确通过所有控制点。

实现方案

下面是一个完整的实现,使用二次贝塞尔曲线算法生成平滑曲线,确保曲线精确通过所有三个控制点:

<!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: 500px;}</style>
</head>
<body><div id="map" class="map"></div><script>// 1. 指定要经过的三个顶点(经纬度坐标)const controlPoints = [[116.3, 39.9],    // 北京[118.8, 37.5],    // 青岛[121.4, 31.2]     // 上海];// 2. 坐标转换工具const transformToMercator = (points) => points.map(point => ol.proj.transform(point, 'EPSG:4326', 'EPSG:3857'));// 3. 二次贝塞尔曲线算法(关键函数)function quadraticBezierCurve(start, control, end, segments = 50) {const result = [];for (let t = 0; t <= 1; t += 1 / segments) {// 二次贝塞尔公式: B(t) = (1-t)²P0 + 2(1-t)tP1 + t²P2const x = Math.pow(1 - t, 2) * start[0] + 2 * (1 - t) * t * control[0] + Math.pow(t, 2) * end[0];const y = Math.pow(1 - t, 2) * start[1] + 2 * (1 - t) * t * control[1] + Math.pow(t, 2) * end[1];result.push([x, y]);}return result;}// 4. 计算控制点位置(确保曲线经过三个点)function calculateControlPoint(p0, p1, p2) {// 控制点位置计算方法:// 假设中间点p1是曲线上的点,则控制点C的位置可以通过以下公式计算:// p1 = 0.5² * p0 + 2 * 0.5 * 0.5 * C + 0.5² * p2// 解得:C = 2 * p1 - 0.5 * (p0 + p2)return [2 * p1[0] - 0.5 * (p0[0] + p2[0]),2 * p1[1] - 0.5 * (p0[1] + p2[1])];}// 5. 创建地图与渲染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})});// 6. 转换坐标并计算贝塞尔曲线const mercatorPoints = transformToMercator(controlPoints);const start = mercatorPoints[0];const middle = mercatorPoints[1];const end = mercatorPoints[2];// 计算控制点const controlPoint = calculateControlPoint(start, middle, end);// 生成贝塞尔曲线const curvePoints = quadraticBezierCurve(start, controlPoint, end, 100);// 7. 创建曲线要素与样式const curveFeature = new ol.Feature({geometry: new ol.geom.LineString(curvePoints)});curveFeature.setStyle(new ol.style.Style({stroke: new ol.style.Stroke({color: 'rgba(255, 0, 0, 0.8)',width: 4,lineCap: 'round',lineJoin: 'round'})}));// 8. 添加控制点标记const vectorSource = new ol.source.Vector();vectorSource.addFeature(curveFeature);controlPoints.forEach((point, index) => {const mercatorPoint = transformToMercator([point])[0];vectorSource.addFeature(new ol.Feature({geometry: new ol.geom.Point(mercatorPoint),style: new ol.style.Style({image: new ol.style.Circle({radius: 8,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' }),offsetY: -15})})}));});// 9. 添加控制点标记(显示计算出的控制点)vectorSource.addFeature(new ol.Feature({geometry: new ol.geom.Point(controlPoint),style: new ol.style.Style({image: new ol.style.Circle({radius: 6,fill: new ol.style.Fill({ color: 'rgba(0, 128, 0, 0.6)' }),stroke: new ol.style.Stroke({ color: 'white', width: 1 })}),text: new ol.style.Text({text: '控制点',font: '12px Arial',fill: new ol.style.Fill({ color: 'black' }),offsetY: 15})})}));map.addLayer(new ol.layer.Vector({ source: vectorSource }));</script>
</body>
</html>

核心技术解析

  1. 二次贝塞尔曲线算法

    • 对于三个点的情况,二次贝塞尔曲线是最适合的选择
    • 曲线公式:B(t) = (1-t)²P0 + 2(1-t)tP1 + t²P2,其中P0和P2是起点和终点,P1是控制点
  2. 控制点计算

    • 为了确保曲线经过中间点,我们通过数学方法计算出合适的控制点位置
    • 控制点公式:C = 2 * P1 - 0.5 * (P0 + P2),其中P1是需要经过的中间点
  3. 曲线精度控制

    • segments 参数控制曲线的分段数
    • 值越大,曲线越平滑,但计算量也会增加

使用与调整

  1. 修改控制点

    • 编辑 controlPoints 数组,修改三个经纬度坐标点
    • 必须提供三个点才能生成曲线
  2. 调整曲线平滑度

    • 修改 quadraticBezierCurve 函数中的 segments 参数
    • 默认值为100,可根据需要增加或减少
  3. 样式定制

    • 修改曲线的颜色、宽度和线型
    • 调整控制点标记的大小和颜色
      在这里插入图片描述

这种方法生成的曲线能够精确经过所有三个指定的点,同时保持整体的平滑性,非常适合需要精确路径的地理可视化应用。

http://www.dtcms.com/wzjs/141197.html

相关文章:

  • rust做网站站长工具星空传媒
  • 安徽常青建设集团网站做一个app软件大概要多少钱
  • 沧州百度爱采购南山网站seo
  • 做一公司网站百度热门搜索排行榜
  • 建网站难不难宁波seo教学
  • 公司做网站让我们销售有什么好的网站吗
  • 怎么查网站的域名备案网站建设服务商
  • 微信在线登录平台哈尔滨seo网络推广
  • 徐州网站建设商城制作网站推广seob2b有哪些电商平台
  • 怎么给网站做广告产品软文范例1000字
  • 徐州网站公司关键词搜索推广排行榜
  • 安陆网站建设西安seo招聘
  • 湖州做网站公司哪家好国内高清视频素材网站推荐
  • wordpress国外付费主题下载重庆百度推广关键词优化
  • 中山哪里做网站常德网站设计
  • python 菜鸟教程seo优化大公司排名
  • 沈阳网站维护公司软文推广页面
  • 郑州天道做网站厦门seo百度快照优化
  • 欧美独立站建站网络营销的推广
  • 餐饮食材配送网站开发企划书aso网站
  • 佛山附近做网站的公司重庆森林粤语
  • 企业局域网站建设模板百度域名注册官网
  • 大理石在哪些网站做宣传不知怎么入门
  • 开学第一课汉字做网站外包公司
  • 网站做贸易用什么色调比较好厦门seo网站推广优化
  • 源代码如何做网站今日油价92汽油价格调整最新消息
  • wordpress 管理员账号在哪里查询宁波谷歌seo
  • 河南河南省住房和城乡建设厅网站企业网站推广的形式有哪些
  • 手机网站建设制作教程视频即时热榜
  • 微电影网站模板产品推广词