python编程画爱心代码,python画爱心代码大全

大家好,小编来为大家解答以下问题,python编程画爱心代码,python画爱心代码大全,今天让我们一起来看看吧!

前端时间电视剧《点燃我,温暖你》正在热播中,里面的天才程序员李峋制作的爱心跳动代码是不是震撼了你的心,今天我们用Python来尝试一下制作爱心跳动代码吧!

怎么说呢,用这个表白也可以的,万一她也看这个剧呢,万一就成了呢 哈哈

冲啊,兄弟们
在这里插入图片描述

okok 话不多说,现在开始代码部分

代码

模块导入

import random
from math import sin, cos, pi, log
from tkinter import *

画布的高和宽

有些数值咱自己也是可以调改的哈,这里我设置的高和宽是 480:640

CANVAS_WIDTH = 640  # 画布的宽
CANVAS_HEIGHT = 480  # 画布的高

x,y轴坐标

CANVAS_CENTER_X = CANVAS_WIDTH / 2  # 画布中心的X轴坐标
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2  # 画布中心的Y轴坐标

放大比例

IMAGE_ENLARGE = 11  # 放大比例

心的颜色

这个自己看着改啊,想改啥色就改啥色

HEART_COLOR = "#ff8181"  # 心的颜色,芜湖我喜欢的粉色

函数生成器

def heart_function(t, shrink_ratio: float = IMAGE_ENLARGE):
"""
    “爱心函数生成器”
    :param shrink_ratio: 放大比例
    :param t: 参数
    :return: 坐标
    """
# 基础函数
    x = 16 * (sin(t) ** 3)
    y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))

放大

# 放大
x *= shrink_ratio
y *= shrink_ratio

移到画布中央

基本操作,我要多发点文字哈哈,不然说我质量不行

# 移到画布中央
    x += CANVAS_CENTER_X
    y += CANVAS_CENTER_Y


return int(x), int(y)

随机内部扩散

def scatter_inside(x, y, beta=0.15):
"""
    随机内部扩散
    :param x: 原x
    :param y: 原y
    :param beta: 强度
    :return: 新坐标
    """
    ratio_x = - beta * log(random.random())
    ratio_y = - beta * log(random.random())


    dx = ratio_x * (x - CANVAS_CENTER_X)
    dy = ratio_y * (y - CANVAS_CENTER_Y)
return x - dx, y - dy

抖动

这一步可关键了,咱做的就是跳动的爱心代码,so这一步重中之重

def shrink(x, y, ratio):
"""
    抖动
    :param x: 原x
    :param y: 原y
    :param ratio: 比例
    :return: 新坐标
    """
    force = -1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.6)  # 这个参数...
    dx = ratio * force * (x - CANVAS_CENTER_X)
    dy = ratio * force * (y - CANVAS_CENTER_Y)
return x - dx, y - dy

调整缩放比例

基本上都可以自己调改到自己喜欢的样子

@staticmethod
    def calc_position(x, y, ratio):
# 调整缩放比例
        force = 1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.520)  # 魔法参数


        dx = ratio * force * (x - CANVAS_CENTER_X) + random.randint(-1, 1)
        dy = ratio * force * (y - CANVAS_CENTER_Y) + random.randint(-1, 1)


return x - dx, y - dy

圆滑的周期缩放比例

def calc(self, generate_frame):
ratio = 10 * curve(generate_frame / 10 * pi)  # 圆滑的周期的缩放比例


halo_radius = int(4 + 6 * (1 + curve(generate_frame / 10 * pi)))
halo_number = int(3000 + 4000 * abs(curve(generate_frame / 10 * pi) ** 2))


all_points = []

光环

# 光环
        heart_halo_point = set()  # 光环的点坐标集合
for _ in range(halo_number):
            t = random.uniform(0, 2 * pi)  # 随机不到的地方造成爱心有缺口
            x, y = heart_function(t, shrink_ratio=11.6)  # 魔法参数
            x, y = shrink(x, y, halo_radius)
if (x, y) not in heart_halo_point:
# 处理新的点
                heart_halo_point.add((x, y))
                x += random.randint(-14, 14)
                y += random.randint(-14, 14)
size = random.choice((1, 2, 2))
                all_points.append((x, y, size))

轮廓

# 轮廓
for x, y in self._points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 3)
            all_points.append((x, y, size))

内容

# 内容
for x, y in self._edge_diffusion_points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 2)
            all_points.append((x, y, size))


for x, y in self._center_diffusion_points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 2)
            all_points.append((x, y, size))


self.all_points[generate_frame] = all_points

最后一步

马上就完成了,坚持就是胜利

def draw(main: Tk, render_canvas: Canvas, render_heart: Heart, render_frame=0):
    render_canvas.delete('all')
    render_heart.render(render_canvas, render_frame)
    main.after(160, draw, main, render_canvas, render_heart, render_frame + 1)


if __name__ == '__main__':
    root = Tk()  # 一个Tk
    canvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)
    canvas.pack()
    heart = Heart()  # 心
    draw(root, canvas, heart)  # 开始画画~
    root.mainloop()

完整代码

import random
from math import sin, cos, pi, log
from tkinter import *

CANVAS_WIDTH = 640  # 画布的宽
CANVAS_HEIGHT = 480  # 画布的高
CANVAS_CENTER_X = CANVAS_WIDTH / 2  # 画布中心的X轴坐标
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2  # 画布中心的Y轴坐标
IMAGE_ENLARGE = 11  # 放大比例
HEART_COLOR = "#ff2121"  # 心的颜色,这个是中国红


def heart_function(t, shrink_ratio: float = IMAGE_ENLARGE):
    """
    “爱心函数生成器”
    :param shrink_ratio: 放大比例
    :param t: 参数
    :return: 坐标
    """
    # 基础函数
    x = 16 * (sin(t) ** 3)
    y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))

    # 放大
    x *= shrink_ratio
    y *= shrink_ratio

    # 移到画布中央
    x += CANVAS_CENTER_X
    y += CANVAS_CENTER_Y

    return int(x), int(y)


def scatter_inside(x, y, beta=0.15):
    """
    随机内部扩散
    :param x: 原x
    :param y: 原y
    :param beta: 强度
    :return: 新坐标
    """
    ratio_x = - beta * log(random.random())
    ratio_y = - beta * log(random.random())

    dx = ratio_x * (x - CANVAS_CENTER_X)
    dy = ratio_y * (y - CANVAS_CENTER_Y)

    return x - dx, y - dy


def shrink(x, y, ratio):
    """
    抖动
    :param x: 原x
    :param y: 原y
    :param ratio: 比例
    :return: 新坐标
    """
    force = -1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.6)  # 这个参数...
    dx = ratio * force * (x - CANVAS_CENTER_X)
    dy = ratio * force * (y - CANVAS_CENTER_Y)
    return x - dx, y - dy


def curve(p):
    """
    自定义曲线函数,调整跳动周期
    :param p: 参数
    :return: 正弦
    """
    # 可以尝试换其他的动态函数,达到更有力量的效果(贝塞尔?)
    return 2 * (2 * sin(4 * p)) / (2 * pi)


class Heart:
    """
    爱心类
    """

    def __init__(self, generate_frame=20):
        self._points = set()  # 原始爱心坐标集合
        self._edge_diffusion_points = set()  # 边缘扩散效果点坐标集合
        self._center_diffusion_points = set()  # 中心扩散效果点坐标集合
        self.all_points = {}  # 每帧动态点坐标
        self.build(2000)

        self.random_halo = 1000

        self.generate_frame = generate_frame
        for frame in range(generate_frame):
            self.calc(frame)

    def build(self, number):
        # 爱心
        for _ in range(number):
            t = random.uniform(0, 2 * pi)  # 随机不到的地方造成爱心有缺口
            x, y = heart_function(t)
            self._points.add((x, y))

        # 爱心内扩散
        for _x, _y in list(self._points):
            for _ in range(3):
                x, y = scatter_inside(_x, _y, 0.05)
                self._edge_diffusion_points.add((x, y))

        # 爱心内再次扩散
        point_list = list(self._points)
        for _ in range(4000):
            x, y = random.choice(point_list)
            x, y = scatter_inside(x, y, 0.17)
            self._center_diffusion_points.add((x, y))

    @staticmethod
    def calc_position(x, y, ratio):
        # 调整缩放比例
        force = 1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.520)  # 魔法参数

        dx = ratio * force * (x - CANVAS_CENTER_X) + random.randint(-1, 1)
        dy = ratio * force * (y - CANVAS_CENTER_Y) + random.randint(-1, 1)

        return x - dx, y - dy

    def calc(self, generate_frame):
        ratio = 10 * curve(generate_frame / 10 * pi)  # 圆滑的周期的缩放比例

        halo_radius = int(4 + 6 * (1 + curve(generate_frame / 10 * pi)))
        halo_number = int(3000 + 4000 * abs(curve(generate_frame / 10 * pi) ** 2))

        all_points = []

        # 光环
        heart_halo_point = set()  # 光环的点坐标集合
        for _ in range(halo_number):
            t = random.uniform(0, 2 * pi)  # 随机不到的地方造成爱心有缺口
            x, y = heart_function(t, shrink_ratio=11.6)  # 魔法参数
            x, y = shrink(x, y, halo_radius)
            if (x, y) not in heart_halo_point:
                # 处理新的点
                heart_halo_point.add((x, y))
                x += random.randint(-14, 14)
                y += random.randint(-14, 14)
                size = random.choice((1, 2, 2))
                all_points.append((x, y, size))

        # 轮廓
        for x, y in self._points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 3)
            all_points.append((x, y, size))

        # 内容
        for x, y in self._edge_diffusion_points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 2)
            all_points.append((x, y, size))

        for x, y in self._center_diffusion_points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 2)
            all_points.append((x, y, size))

        self.all_points[generate_frame] = all_points

    def render(self, render_canvas, render_frame):
        for x, y, size in self.all_points[render_frame % self.generate_frame]:
            render_canvas.create_rectangle(x, y, x + size, y + size, width=0, fill=HEART_COLOR)


def draw(main: Tk, render_canvas: Canvas, render_heart: Heart, render_frame=0):
    render_canvas.delete('all')
    render_heart.render(render_canvas, render_frame)
    main.after(160, draw, main, render_canvas, render_heart, render_frame + 1)


if __name__ == '__main__':
    root = Tk()  # 一个Tk
    canvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)
    canvas.pack()
    heart = Heart()  # 心
    draw(root, canvas, heart)  # 开始画画~
    root.mainloop()

最后

给大家分享一波Python全套学习资料,免费!免费!免费!都是我自己学习时整理的,整理不易,请多多点赞分享哦~

微信扫描下方CSDN官方认证二维码即可领取啦!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python学习软件

工欲善其事,必先利其器 火车头标题伪原创【php源码】。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
在这里插入图片描述

三、Python入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
在这里插入图片描述

四、Python练习题

检验学习成果
在这里插入图片描述

五、Python实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

六、Python面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述
需要的小伙伴可自行微信扫描下方CSDN官方认证二维码免费领取!!

小狗AI
关注 关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如何用python爱心代码_用 python 爱心代码讲解
weixin_39607836的博客
11-23 2720
学计算机的男生发这个给我看是什么意思?​www.zhihu.com原理其实挺简单的. 代码网上也有. 最难的部分前人都告诉我们了, 心形可. 要自己推导通过泰勒各种扭也可以. 通过肉眼扭我感觉也不是不可..我们理一下思路.怎么心形曲线怎么填满心形曲线怎么用 python 怎么心形曲线这个 google 一下就行了. heart curve equation我们选用中上那个.怎么填满...
如何用python爱心代码_使用Python出小人发射爱心代码
weixin_39987926的博客
11-23 1826
我就废话不多说了,直接上代码吧!#2.14from turtle import *from time import sleepdef go_to(x, y):up()goto(x, y)down()def head(x,y,r):go_to(x,y)speed(1)circle(r)leg(x,y)def leg(x,y):right(90)forward(180)right(30)forward...
Python爱心程序
11-20
一个简单的Python绘图案例。通过Python的turtle库来绘制一个爱心
python简单的代码爱心,python爱心代码大全
chatgpt002的博客
12-14 1493
大家好,给大家分享一下python爱心代码怎么运行,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!python中有很多方法去心形图用来表白,其中最典型的就是数学中心型曲线:r=a(1-sinθ),下面就总结以下python中那些心形图的方法。末尾有一个完美的表白工具,可以直接使用。
爱心代码python)_爱心代码编程python可复制_python爱心代码大全
2301_76161259的博客
02-05 1378
鉴于好多小伙伴不太会运行,这边补充一下我的运行方式哈~(针对python),不会的小伙伴直接点击 “运行步骤”即可~运行步骤一、python代码(love.py)else:print('\n to 茂茂酱!!\n\n')运行图:二、python代码(love.py)# 布置布和设置笔配置t.setup(width=800, height=500) #窗口(布)大小t.color('pink', 'pink') #笔填充颜色t.pensize(3) #笔粗细。
python编程爱心代码.docx
06-13
Python编程爱心代码是一个有趣的练习,它展示了Python语言的简洁性和实用性。Python作为一种高级编程语言,以其易读性强、语法简洁而受到广大编程者的喜爱,特别适合初学者入门。此外,Python在众多领域都有广泛的...
爱心代码-使用Python实现的爱心代码.zip
最新发布
03-10
Python编程语言中,"爱心代码"通常是指利用字符或者字符串拼接生成一个形似爱心的图案。这种代码是初学者常用来练习控制流、字符串操作以及艺术输出的一个经典示例。下面,我们将深入探讨如何使用Python实现爱心...
python制作的爱心代码
11-08
Python编程语言中,我们可以利用数学函数来绘制各种有趣的图形,包括爱心。这段代码就是用Python制作的一个简单的心形图案。下面将详细解释这个代码的工作原理、涉及的数学知识以及如何运行它。 首先,让我们逐行...
使用Python出小人发射爱心代码
09-18
今天小编就为大家分享一篇使用Python出小人发射爱心代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
python简单的代码爱心,python编程爱心代码
2301_81837718的博客
12-20 1678
大家好,小编来为大家解答以下问题,python爱心代码怎么运行,python简单的代码爱心,现在让我们一起来看看吧!
Python李峋同款跳动的爱心代码(可写字版)
xxue345678的博客
12-07 3608
一年前小编曾用python编写过跳动的爱心代码,不知道有多少小伙伴们已经学会了呢,最近小编在用c语言和java编写跳动的爱心的时候,发现之前用python编写跳动的爱心时没有添加文字,这不,小编立马翻出之前的代码一顿操作,给大家带来了更新后的爱心,快来看看趴~(附详细分析哦)
python简单的代码爱心,如何用python爱心代码
a17348的博客
01-09 1625
这篇文章主要介绍了python爱心代码怎么运行,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。大家好,给大家分享一下如何用python一个心形图,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!
python爱心代码
m0_60735903的博客
03-31 6539
代码python爱心代码
python爱心代码合集
TwcatL_tree
11-08 1万+
如果想要把python文件转成exe文件,发送给没有安装Python的对象,在她/他的电脑上运行,可以参考。# love = input(‘请输入表白语句,然后回车,默认为"I Love You":\n’)# me = input(‘请输入要表白的人:\n’)空格与星号可以换位置,运行会有不一样的效果。# # 如果未输入表白语句,则使用默认语句。# 在(x,y)处爱心lalala。# 用来存放绘图点X,Y,Z坐标。# 爱心的颜色及外边笔的颜色。# 爱心布的大小。# 定位到(x,y)
爱心代码python)_爱心代码编程python可复制
隔壁王叔的博客
11-25 8151
爱心代码python)_爱心代码编程python可复制
python爱心代码 单行_python3.x代码爱心表白(代码如下 )-Go语言中文社区
weixin_39966020的博客
11-23 438
直接上代码。如下import turtle#我们在这里导入python中的工具包import timedef LittleHeart():for i in range(200):turtle.right(1)turtle.forward(2)love=input('Please enter a sentence of love,otherwise the default is "I Love ...
python爱心代码集锦(18款)
热门推荐
逆境清醒的博客
12-09 11万+
python绘制的爱心代码集锦,主要涉及的模块有turtle、tkinter、math等。有代码运行效果索引图方便预览。
Python爱心代码实例:绘制动态图形和文字表达
本资源是一份关于Python编程中实现爱心图案的教程,特别关注于通过代码绘制各种形状的心形,包括基础的“一行代码爱心”、填充型爱心、动态变化的红心以及特殊的爱心样式如桃心、线性和立体效果。此外,还涉及到了...
写文章

热门文章

  • python编程游戏代码大全,python简单的小游戏代码 16772
  • python编写小游戏详细教程,用python做简单的小游戏 8101
  • python设计实验报告 5979
  • python在财务分析中的应用,用python做财务数据分析 4955
  • python如何打出自己的名字,怎么用python写自己名字 4879

分类专栏

  • 降低AI辅写 3篇
  • 降低AI查询率 3篇
  • 论文 5篇
  • 智能写作 14篇
  • 软件 2篇
  • 人工智能 6篇

最新评论

  • js与python哪个功能更强大,javascript与python性能对比

    lovelili1: 连java和JavaScript都分不清

  • 论文如何降低AIGC【有效方法】

    Cheng285: 省流,要花200开会员

  • python 贪吃蛇小游戏代码,python贪吃蛇最简单代码

    苦瓜想干飞日本: 我的贪吃蛇代码比你简单,你有2208字节,我才1742字节

  • javascript设计网页作品,javascript网站设计

    小王毕业啦: 博主的文章让我对Javascript设计网页作品这个主题有了全新的认识,细节描写非常到位,让我感受到了博主的深厚功底。期待博主未来能够持续分享更多好文,同时也希望能够得到博主的指导,共同进步。非常感谢博主的分享和支持!文章内容很有价值,让人受益匪浅。愿意持续关注博主的分享,期待更多精彩内容。

  • python编程常用英语词汇,python编程语言单词

    初源代码: 真好,标了音标就是好!照顾小白了

最新文章

  • python下载到哪个盘比较好,python下载后找不到路径
  • python官网下载安装免费,python官方中文文档下载
  • python微信小程序自动打卡,python微信小程序打卡
2024
04月 13篇
03月 205篇
02月 128篇
01月 371篇
2023年1159篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家朝阳区玻璃钢雕塑工程价格启东玻璃钢喷泉雕塑揭阳玻璃钢果蔬雕塑贵州省专业玻璃钢雕塑厂家济源广场玻璃钢仿铜雕塑厂家厂家推荐沈阳玻璃钢花盆青花瓷新中式商场美陈浙江室内商场美陈报价本溪出口沈阳玻璃钢花盆广东大型主题商场美陈哪家好福建大型雕塑玻璃钢火烈鸟玻璃钢雕塑定制江苏公园玻璃钢雕塑订做价格玻璃钢动物雕塑哪里找灵璧玻璃钢花盆花器盐城玫红色玻璃钢花盆世界杯商场入口美陈廊坊大型玻璃钢花盆报价平凉卡通玻璃钢雕塑订做周口商场美陈造景玻璃钢彩绘小奶牛雕塑玻璃钢雕塑怎么固定福建主题商场美陈销售厂家优质玻璃钢雕塑施工玻璃钢雕塑加工批发兴化玻璃钢南瓜屋雕塑商场扶梯中缝美陈哈尔滨火烈鸟玻璃钢雕塑定做同安园林玻璃钢雕塑采购上海玻璃钢仿真水果雕塑定制香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化