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

做网站功能网站推广优化设计方案

做网站功能,网站推广优化设计方案,网站建设服务器百度云,建设安全施工网络平台数学原理及算法过程 Delaunay 三角剖分是一种特殊的三角剖分方法,它满足以下两个重要性质: 最大化最小角性质:Delaunay 三角剖分通过避免细长的三角形来最大化所有三角形的最小角。空外接圆性质:在 Delaunay 三角剖分中&#xf…

数学原理及算法过程

Delaunay 三角剖分是一种特殊的三角剖分方法,它满足以下两个重要性质:

  • 最大化最小角性质:Delaunay 三角剖分通过避免细长的三角形来最大化所有三角形的最小角。
  • 空外接圆性质:在 Delaunay 三角剖分中,每个三角形的外接圆不包含任何其他点。这意味着,对于三角剖分中的任意三角形,其外接圆内没有其他输入点。

基于这些性质,Delaunay 三角剖分算法的一种实现方式是 Bowyer-Watson 算法,这是一种增量算法。以下是具体的算法步骤:

算法过程
  1. 初始化超级三角形:
  • 创建一个足够大的超级三角形,包含所有输入点。这个三角形的三个顶点坐标远离实际输入点的范围,使其能够覆盖所有点。
  1. 逐点插入:
  • 对于每个输入点,找到所有包含该点的外接圆的三角形。这些三角形被称为“坏三角形”。
  1. 构建多边形:
  • 对于所有坏三角形,它们的每条边,如果只被一个坏三角形共享,则称其为边界边。这些边将形成一个多边形。
  1. 删除坏三角形:
  • 将所有坏三角形从三角剖分中删除。
  1. 重新三角化多边形:
  • 用新插入的点和多边形的边构成新的三角形,并将这些三角形加入三角剖分中。
  1. 移除超级三角形的影响:
  • 在所有点都插入后,移除包含超级三角形顶点的所有三角形,得到最终的 Delaunay 三角剖分。

数学原理

  • 外接圆计算

    • 对于每个三角形,计算其外接圆。外接圆的圆心(外心)和半径可以通过三角形顶点的坐标计算。
    • 设三角形顶点为 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1, y_1), (x_2, y_2), (x_3, y_3) (x1,y1),(x2,y2),(x3,y3)。外接圆的圆心 ( u , v ) (u, v) (u,v) 计算如下:
      d = 2 ( x 1 ( y 2 − y 3 ) + x 2 ( y 3 − y 1 ) + x 3 ( y 1 − y 2 ) ) d = 2 \left( x_1(y_2 - y_3) + x_2(y_3 - y_1) + x_3(y_1 - y_2) \right) d=2(x1(y2y3)+x2(y3y1)+x3(y1y2))

    u = ( ( x 1 2 + y 1 2 ) ( y 2 − y 3 ) + ( x 2 2 + y 2 2 ) ( y 3 − y 1 ) + ( x 3 2 + y 3 2 ) ( y 1 − y 2 ) ) d u = \frac{((x_1^2 + y_1^2)(y_2 - y_3) + (x_2^2 + y_2^2)(y_3 - y_1) + (x_3^2 + y_3^2)(y_1 - y_2))}{d} u=d((x12+y12)(y2y3)+(x22+y22)(y3y1)+(x32+y32)(y1y2))

    v = ( ( x 1 2 + y 1 2 ) ( x 3 − x 2 ) + ( x 2 2 + y 2 2 ) ( x 1 − x 3 ) + ( x 3 2 + y 3 2 ) ( x 2 − x 1 ) ) d v = \frac{((x_1^2 + y_1^2)(x_3 - x_2) + (x_2^2 + y_2^2)(x_1 - x_3) + (x_3^2 + y_3^2)(x_2 - x_1))}{d} v=d((x12+y12)(x3x2)+(x22+y22)(x1x3)+(x32+y32)(x2x1))

    r = ( x 1 − u ) 2 + ( y 1 − v ) 2 r = \sqrt{(x_1 - u)^2 + (y_1 - v)^2} r=(x1u)2+(y1v)2

import matplotlib.pyplot as plt
import numpy as npclass Point:def __init__(self, x, y):self.x = xself.y = yclass Triangle:def __init__(self, p1, p2, p3):self.p1 = p1self.p2 = p2self.p3 = p3self.circumcenter, self.circumradius = self.circumcircle()def circumcircle(self):"""Calculate the circumcenter and circumradius of the triangle."""ax, ay = self.p1.x, self.p1.ybx, by = self.p2.x, self.p2.ycx, cy = self.p3.x, self.p3.yd = 2 * (ax * (by - cy) + bx * (cy - ay) + cx * (ay - by))ux = ((ax*ax + ay*ay) * (by - cy) + (bx*bx + by*by) * (cy - ay) + (cx*cx + cy*cy) * (ay - by)) / duy = ((ax*ax + ay*ay) * (cx - bx) + (bx*bx + by*by) * (ax - cx) + (cx*cx + cy*cy) * (bx - ax)) / dcircumcenter = Point(ux, uy)circumradius = np.sqrt((ax - ux)**2 + (ay - uy)**2)return circumcenter, circumradiusdef contains_point(self, p):"""Check if the point p is inside the circumcircle of the triangle."""return np.sqrt((p.x - self.circumcenter.x)**2 + (p.y - self.circumcenter.y)**2) < self.circumradiusdef delaunay_triangulation(points):"""Perform Delaunay triangulation on a set of points."""super_triangle = Triangle(Point(-1e5, -1e5), Point(1e5, -1e5), Point(0, 1e5))triangulation = [super_triangle]for p in points:bad_triangles = []for tri in triangulation:if tri.contains_point(p):bad_triangles.append(tri)polygon = []for tri in bad_triangles:for edge in [(tri.p1, tri.p2), (tri.p2, tri.p3), (tri.p3, tri.p1)]:is_shared = Falsefor other in bad_triangles:if other != tri and (edge in [(other.p1, other.p2), (other.p2, other.p3), (other.p3, other.p1)] or edge[::-1] in [(other.p1, other.p2), (other.p2, other.p3), (other.p3, other.p1)]):is_shared = Truebreakif not is_shared:polygon.append(edge)for tri in bad_triangles:triangulation.remove(tri)for edge in polygon:triangulation.append(Triangle(edge[0], edge[1], p))triangulation = [tri for tri in triangulation if not (super_triangle.p1 in [tri.p1, tri.p2, tri.p3] or super_triangle.p2 in [tri.p1, tri.p2, tri.p3] or super_triangle.p3 in [tri.p1, tri.p2, tri.p3])]return triangulationdef plot_triangulation(triangles, points):for tri in triangles:plt.plot([tri.p1.x, tri.p2.x], [tri.p1.y, tri.p2.y], 'b-')plt.plot([tri.p2.x, tri.p3.x], [tri.p2.y, tri.p3.y], 'b-')plt.plot([tri.p3.x, tri.p1.x], [tri.p3.y, tri.p1.y], 'b-')for p in points:plt.plot(p.x, p.y, 'ro')plt.show()
# Generate random points in the unit square
rectangle_corners = [Point(0, 0), Point(1, 0), Point(1, 1), Point(0, 1)]
random_points = [Point(np.random.rand(), np.random.rand()) for _ in range(20)]
points = rectangle_corners + random_pointstriangles = delaunay_triangulation(points)
plot_triangulation(triangles, points)

在这里插入图片描述

http://www.yidumall.com/news/87309.html

相关文章:

  • 广州冼村社区服务中心电话广州百度搜索排名优化
  • 领券的网站怎么建设5g影讯5g天线在线观看免费视频
  • 安康网站建设公司报价批量优化网站软件
  • 昆明网站推广2021最火关键词
  • 网站源码下载视频长沙百度关键词推广
  • 网站背景特效企业网站模板建站
  • 我是做网站的 怎么才能提高业绩大连网站搜索排名
  • 免费图片素材网站推荐软文写作500字
  • 网站建设的自己怎么做关键词优化
  • o2o网站设计百度代理合作平台
  • 百度优化只做移动网站没有pc站不屏蔽的国外搜索引擎
  • 芜湖网站建设哪家好宁波seo关键词排名优化
  • 镇江网站建设费用sem优化推广
  • 做网站的前期准备搜索引擎优化工具
  • 廊坊网站建设哈尔滨百度网络推广
  • 学校 网站建设招聘微信crm系统
  • 展示型网站模板代码百度企业查询
  • 网站字体加载不出来怎么办百度推广平台首页
  • 厦门旅游网页设计东莞百度seo关键词优化
  • 上海著名的建筑设计公司seo的基本步骤是什么
  • 网络叶子 网站推广西安的网络优化公司
  • wordpress子页面不显示不出来无线网络优化是做什么的
  • 成都网站建设设计网络营销怎么推广
  • python网站开发详细步骤代理怎么引流推广
  • 动漫做那个视频网站成都黑帽seo
  • 技术支持 武汉网站建设邯郸seo排名
  • 网站图片尺寸大小技能培训
  • 确保网站地址没有做301跳转今天全国疫情最新消息
  • 手机软件用什么语言开发武汉seo网站排名优化
  • 商城型网站开发网站建设百度网页版 入口