SEO基础

SEO基础

Products

当前位置:首页 > SEO基础 >

华龙建设部网站为何无法响应式布局?

96SEO 2026-02-19 19:46 14


华龙建设部网站为何无法响应式布局?

ShapePoints函数库是一个用于生成常见几何图形顶点数据#xff08;PackedVector2Array#xff09;的静态函数库。

生成的数据可用于_draw和Line2D、Polygon2D等进行绘制和显示。

因为不断地持续扩展#xff0c;ShapePoint…概述

本篇为ShapePoints静态函数库的补充和辅助文档。

ShapePoints函数库是一个用于生成常见几何图形顶点数据PackedVector2Array的静态函数库。

生成的数据可用于_draw和Line2D、Polygon2D等进行绘制和显示。

因为不断地持续扩展ShapePoints函数库的函数数目在不断增加同时涉及的图形类型也在发生变化。

本篇按照一定的分类阐述每个图形函数的原理和具体实现以及具体使用。

注意本篇基础内容写于2023年7月由3篇文章汇总而成。

ShapePoints函数库及其使用会单独发文贴出。

本篇更接近原理讲解。

基础原理

在一个平面中确定一个直角坐标系后平面上任意一点位置就可以用(x,y)这样的值对来表示(x,y)可以被称为这个点的坐标。

同样这个点(x,y)也可以理解为相对于坐标系原点(0,0)水平移动了x垂直移动了y也就是一个由原点指向(x,y)的向量。

通过平面向量的加减乘除以及旋转操作我们获得新的点的位置一系列点的位置可以被顺序用线段连接起来构成PolyLine(折线)或PolyGon(多边形闭合的折线)这些点数据可以用于_draw和Line2D、Polygon2D等绘制和显示几何图形

基础图形

矩形最简单计算出4个顶点就行。

其运算不过是一些简单的向量加减法。

实现代码

rect(size:Vector2,offset:Vector2

Vector2.ZERO)

求正多边形的顶点其本质是求圆上等分的点。

可以通过向量旋转法求取。

起始角度不同图形发生相应旋转。

实现代码

regular_polygon(start_angle:int,edges:int,r:float,offset:Vector2

Vector2.ZERO):var

Vector2.RIGHT.rotated(deg_to_rad(start_angle))

rfor

range(edges):points.append(vec.rotated(2*

PI/edges

圆是边数很多的正多边形。

问题在于这个边数计算怎样才能保证任何半径下圆都看起来很平滑。

我的方法简单粗暴边数直接等于2πr也就是周长。

这等于无论圆的半径是多少它都要包含2πr个顶点。

实现代码

r,r,offset)points.append(points[0])return

points扇形

sector(start_angle:int,end_angle:int,r:float):var

points:PackedVector2Arraypoints.append(Vector2.ZERO)points.append_array(arc(start_angle,end_angle,r))points.append(Vector2.ZERO)return

points弧形

同样为了始终保持平滑效果绘制的点个数是与r的大小相关的即始终绘制θ×r个点。

实现代码

arc(start_angle:int,end_angle:int,r:float,offset:Vector2

Vector2.ZERO):var

Vector2.RIGHT.rotated(deg_to_rad(start_angle))

rfor

range(edges1):points.append(vec.rotated(angle/edges

offset)return

星形是在两个半径不同的同心圆上求正多边形顶点。

也是采用向量旋转法。

实现代码

star(start_angle:int,edges:int,r:float,r2:float

0,offset:Vector2

Vector2.RIGHT.rotated(deg_to_rad(start_angle))

内部半径var

Vector2.RIGHT.rotated(deg_to_rad(start_angle

180/edges))

range(edges):points.append(vec.rotated(2

PI/edges

offset)points.append(vec2.rotated(2

PI/edges

round_rect(size:Vector2,r1:float,r2:float,r3:float,r4:float,offset:Vector2

Vector2.ZERO)

points:PackedVector2Arraypoints.append_array(arc(180,270,r1,Vector2(r1,r1)

offset))points.append_array(arc(270,360,r2,Vector2(size.x

r2,r2)

offset))points.append_array(arc(0,90,r3,Vector2(size.x

r3,size.y

offset))points.append_array(arc(90,180,r4,Vector2(r4,size.y

r4)

offset))points.append(Vector2(0,r1)offset)return

points倒角矩形

倒角矩形跟圆角矩形很像只是更简单了不用在四个角上画圆弧了而是从矩形的4个顶点变为计算8个顶点。

实现代码

chamfer_rect(size:Vector2,a:float,b:float,c:float,d:float,offset:Vector2

Vector2.ZERO)

offset,Vector2(size.x,size.y-c)

offset,Vector2(size.x-c,size.y)

offset]points.append(points[0])

闭合return

capsule(size:Vector2,offset:Vector2

Vector2.ZERO)

横向points.append_array(arc(90,270,r,Vector2(r,r)

offset))points.append_array(arc(-90,90,r,Vector2(size.x-r,r)

offset))else:

纵向points.append_array(arc(180,360,r,Vector2(r,r)

offset))points.append_array(arc(0,180,r,Vector2(r,size.y-r)

offset))points.append(points[0])

闭合return

get_rect().sizedraw_polyline(ShapePoints.capsule(size),Color.GREEN_YELLOW,1)效果

梭形的本质是绘制两段在X轴或Y轴上对称的圆弧。

而圆弧需要的就是半径、起始角度和结束角度。

r^2

有了半径r和二分之一的夹角θ就可以求圆弧了反向的圆弧也可以求出。

实现代码

spindle(size:Vector2,offset:Vector2

Vector2.ZERO)

dxdy:points.append_array(arc(180-angle,180angle,r,Vector2(r,dy)))points.append(Vector2(dx,0))points.append_array(arc(-angle,angle,r,Vector2(-r2*dx1,dy)))points.append(points[0])

闭合else:points.append_array(arc(270-angle,270angle,r,Vector2(dx,r)))points.append(Vector2(size.x,dy))points.append_array(arc(90-angle,90angle,r,Vector2(dx,-r2*dy1)))points.append(points[0])

闭合return

get_rect().sizedraw_polyline(ShapePoints.spindle(size),Color.GREEN_YELLOW,1)效果

特殊图形

最主要的阴阳鱼几何组成却十分简单可以看成是一个大半圆弧和两个反向的小半圆弧连接形成的。

static

阴鱼dict[yin].append_array(arc(90,270,r,offset))dict[yin].append_array(arc(-90,90,r/2,Vector2(0,-r/2)offset))var

arc(90,270,r/2,Vector2(0,r/2)offset)ac.reverse()dict[yin].append_array(ac)#

阳鱼dict[yang].append_array(arc(-90,90,r,offset))dict[yang].append_array(arc(90,270,r/2,Vector2(0,r/2)offset))var

ac2

arc(-90,90,r/2,Vector2(0,-r/2)offset)ac2.reverse()dict[yang].append_array(ac2)return

dict绘制测试

taiji[yin]:draw_circle(point,0.5,Color.CHARTREUSE)draw_polyline(taiji[yin],Color.AQUA,1)draw_polyline(taiji[yang],Color.AQUA,1)draw_polyline(taiji[yin_eye],Color.AQUA,1)draw_polyline(taiji[yang_eye],Color.AQUA,1)效果

螺旋线

helix(start_angle:int,start_r:float,end_r:float,step:int

1,offset:Vector2

range(steps):points.append(Vector2.RIGHT.rotated(deg_to_rad(start_angle

step

rect.get_center()draw_polyline(ShapePoints.helix(0,0,rect.size.y

2,1,center),Color.GREEN_YELLOW,2)

各种网格

最好是能够将网格绘制也像刻度线求取函数一样封装成函数通过传入参数后返回横线竖线线的集合然后具体绘制可以在任何节点中进行。

函数化的好处还在于你可以求取不同参数下的网格线然后具体绘制的时候使用不同的粗细、颜色等。

搭配起来可以绘制更复杂的网格线比如心电图纸的大小格设计。

网格线求取函数

rect_grid_lines(size:Vector2,cell_size:Vector2)

Dictionary:var

size.x]lines[v_lines].append(v_line1)lines[h_lines].append(h_line1)for

range(1,size.x1):var

xlines[v_lines].append([v_line1[0]

offset_x,v_line1[1]

ylines[h_lines].append([h_line1[0]

offset_y,h_line1[1]

ShapePoints.rect_grid_lines(Vector2(10,10),Vector2(50,50))#

绘制垂直线for

grid[v_lines]:draw_line(line[0],line[1],Color.GREEN_YELLOW,2)#

绘制水平线for

grid[h_lines]:draw_line(line[0],line[1],Color.GREEN_YELLOW,2)绘制函数

因为_draw和draw_*之类的只能在CanvasItem类型及其子节点中使用并且不能用于编写静态函数所以好的办法就剩下将点、线之类的求取做成函数而在实际的扩展节点中在基于这些求取函数编写进一步的绘制函数。

tool

_draw():draw_grid(Vector2(10,10),Vector2(50,50))#

绘制网格函数

draw_grid(size:Vector2,cell_size:Vector2,border_color:Color

Color.GREEN_YELLOW,border_width

void:var

ShapePoints.rect_grid_lines(size,cell_size)#

绘制垂直线for

grid[v_lines]:draw_line(line[0],line[1],border_color,border_width)#

绘制水平线for

grid[h_lines]:draw_line(line[0],line[1],border_color,border_width)网格线求取和网格线绘制函数的好处是你可以轻松的基于其创建复杂的网格比如下面这样的

tool

_draw():draw_grid(Vector2(50,50),Vector2(10,10),Color.ORANGE)draw_grid(Vector2(10,10),Vector2(50,50),Color.ORANGE_RED,2)矩形点网格

再绘制原点网格或十字网格的时候要的不再是一条条的线而是网格的交点。

网格点求取函数

rect_grid_points(size:Vector2,cell_size:Vector2)

range(size.x

draw_point_grid(size:Vector2,cell_size:Vector2,point_color:Color

Color.GREEN_YELLOW,r

ShapePoints.rect_grid_points(size,cell_size):draw_circle(point,r,point_color)使用

tool

_draw():draw_point_grid(Vector2(10,10),Vector2(50,50),Color.GREEN_YELLOW,5)也可以使用不同参数的多个点网格叠加

tool

_draw():draw_point_grid(Vector2(50,50),Vector2(10,10),Color.ORANGE)draw_point_grid(Vector2(10,10),Vector2(50,50),Color.ORANGE_RED,5)十字线网格

返回指定点为中心给定长度的两条互相垂直线段可以用于绘制十字坐标线

static

line_cross(position:Vector2,length:float,start_angle:int

Array:#

[Vector2.LEFT.rotated(start_angle)

length/2.0

position,Vector2.RIGHT.rotated(start_angle)

length/2.0

[Vector2.UP.rotated(start_angle)

length/2.0

position,Vector2.DOWN.rotated(start_angle)

length/2.0

draw_line_cross_grid(size:Vector2,cell_size:Vector2,color:Color

10,start_angle:int

ShapePoints.rect_grid_points(size,cell_size):var

line_cross

ShapePoints.line_cross(point,length,start_angle)draw_line(line_cross[0][0],line_cross[0][1],Color.GREEN_YELLOW,1)draw_line(line_cross[1][0],line_cross[1][1],Color.GREEN_YELLOW,1)使用

tool

_draw():draw_line_cross_grid(Vector2(10,10),Vector2(50,50))旋转45度

因为设定了start_angle参数所以理论上你可以任意设定十字的旋转角度甚至将其做成动画。

tool

_draw():draw_line_cross_grid(Vector2(10,10),Vector2(50,50),Color.GREEN_YELLOW,10,45)三角点网格

网格点求取函数

triangle_grid_points(size:Vector2,cell_size:Vector2)

range(size.y

range(size.x):points.append(Vector2(x,y)

cell_size

Vector2(cell_size.x/2,0))return

points绘制函数

draw_triangle_point_grid(size:Vector2,cell_size:Vector2,point_color:Color

Color.GREEN_YELLOW,r

ShapePoints.triangle_grid_points(size,cell_size):draw_circle(point,r,point_color)六边形点网格

将奇偶行调换一下位置也就是偶数行进行半偏移而奇数行不进行偏移偶数行(x1)

0时不画点奇数行x

hex_grid_points(size:Vector2,cell_size:Vector2)

range(size.y

draw_hex_point_grid(size:Vector2,cell_size:Vector2,point_color:Color

Color.GREEN_YELLOW,r

ShapePoints.hex_grid_points(size,cell_size):draw_circle(point,r,point_color)使用

tool

_draw():draw_hex_point_grid(Vector2(10,10),Vector2(50,50),Color.GREEN_YELLOW,5)tool

extends

_draw():draw_hex_point_grid(Vector2(30,30),Vector2(20,20),Color.ORANGE,2)棋盘格

矩形网格

checker_board_rects(size:Vector2,cell_size:Vector2)

Array:var

1):rects_yang.append(Rect2(pos,cell_size))else:rects_yin.append(Rect2(pos,cell_size))return

矩形棋盘格绘制函数

draw_checker_board_grid(size:Vector2,cell_size:Vector2,yang_color:Color

Color.DIM_GRAY,draw_grid_lines:bool

Color.DIM_GRAY.darkened(0.5),border_width:int

void:var

ShapePoints.checker_board_rects(size,cell_size)var

grid[0]var

rects_yang:draw_rect(rect,yang_color)for

rect

rects_yin:draw_rect(rect,yin_color)if

draw_grid_lines:

绘制网格线draw_line_grid(size,cell_size,border_color,border_width)使用

tool

_draw():draw_checker_board_grid(Vector2(9,9),Vector2(20,20))tool

extends

_draw():draw_checker_board_grid(Vector2(9,9),Vector2(20,20),Color.ORANGE_RED,Color.ORANGE,true)tool

extends

_draw():draw_checker_board_grid(Vector2(9,9),Vector2(20,20),Color.GREEN_YELLOW,Color.YELLOW,true,Color.GREEN_YELLOW.darkened(0.2),1)刻度线

弧形刻度线

在制作一些钟表、压力表以及其他一些控件时存在弧形刻度或圆形刻度线绘制需求为了减少重复造轮子搞了一个函数。

start_angle:起始角度

arc_scale(start_angle:int,end_angle:int,steps:int,r:float,length:float)

Array:var

(r-length)).rotated(deg_to_rad(start_angle))var

vec2

r).rotated(deg_to_rad(start_angle))var

angle

rect.size.y/2draw_circle(center,r,Color.AZURE)#

绘制基础刻度var

lines:draw_line(line[0]center,line[1]center,Color.AQUA,2)var

lines2

lines2:draw_line(line[0]center,line[1]center,Color.AQUA,1)绘制压力表刻度

tool

rect.size.y/2draw_circle(center,r,Color.AZURE)#

最细刻度var

arc_scale(-(270-45),90-45,60,r,4)for

line

lines3:draw_line(line[0]center,line[1]center,Color.AQUA,1)#

中刻度var

arc_scale(-(270-45),90-45,12,r,8)for

line

lines2:draw_line(line[0]center,line[1]center,Color.AQUA,1)#

大刻度var

arc_scale(-(270-45),90-45,6,r,10)for

line

lines:draw_line(line[0]center,line[1]center,Color.CADET_BLUE,2)

直线刻度

line_scale(ruler_width:float,steps:int,length:float):var

scales:Array

Vector2(5,5)draw_rect(rect,Color(orange).lightened(0.2))draw_rect(Rect2(Vector2.ZERO,Vector2(rect.size.x,20)),Color(orange).lightened(0.4))#

最细刻度var

lines:draw_line(line[0]offset,line[1]offset,Color(#444).lightened(0.5),1)#

最细刻度var

lines2:draw_line(line[0]offset,line[1]offset,Color(#444).lightened(0.4),1)#

最细刻度var

lines3:draw_line(line[0]offset,line[1]offset,Color(#444).darkened(0.4),2)



SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback