- 博客(481)
- 资源 (9)
- 收藏
- 关注
原创 常用又有趣的网站大合集
〇、【Python challenge】通关代码及攻略一、PIECES 拼图PIECES 拼图网站用 30 个 CSS 碎片进行拼图,向我们呈现了 30 种濒临灭绝的动物。二、小甲鱼编程学习工作室包含了各种编程语言学习以及计算机基本操作的教学与奇技淫巧三、Wolfram Alpha这是由Wolfram Research公司推出的一款在线自动问答系统和计算知识引擎。这是一款在线问答工具,与常见搜索引擎的最大不同之处,就是它能直接返回问题的答案,并附上详尽的答案数据与图表信息供用户参考。四
2020-10-09 19:35:22 1379
原创 python实践入门课程作业答案与答疑
第一天课程作业答案python与sublime的安装使用pip从豆瓣源安装第三方模块使用you-get命令下载B站周杰伦专题常见疑问MAC如何运行you-get程序命令行和解释器的区别...
2020-03-25 09:17:40 13860 18
原创 python初学者学习路线整理
python基础知识目录第一部分 基础篇1. 1基本概念变量的值和类型表达式和语句函数的使用1.2.重要数据类型字符串列表元组集合1.3 基本程序结构顺序分支循环1.4 面向对象的编程类和对象类和函数类和方法继承1.5 文件操作第二部分 项目篇2.1 入门级小项目2.2 python数据分析numpy基础pandas之Series...
2020-03-07 22:48:58 1446
原创 使用python绘制二元函数对应的曲面
为了绘制C空间投影(theta1,theta2,L1),我们可以使用python中的matplotlib进行三维曲面的绘制。其中,L1=cos(θ1)+cos(θ2)L1=cos(\theta_1)+cos(\theta_2)L1=cos(θ1)+cos(θ2)from matplotlib import pyplot as pltimport numpy as npfrom numpy import cos,pi# 生成测试数据theta1 = np.linspace(0, 2*pi, 10
2022-05-28 13:04:16 1506 1
原创 使用matlab编写协方差矩阵计算矩阵
Dr.Can在他的教学视频(【卡尔曼滤波器】2_数学基础_数据融合_协方差矩阵_状态空间方程_观测器问题)中使用了足球运动员的数据介绍了协方差矩阵的概念和计算方法,原始数据如下图,那么协方差矩阵到底是什么?他有什么用?我们怎么计算协方差矩阵?如何编写程序让计算机帮助我们计算协方差矩阵呢?协方差矩阵其实是用来描述一个数据集中不同字段(属性)数据之间的关联程度的。百度词条的解释是:协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同
2022-05-08 11:43:06 8274 4
原创 使用matplotlib绘制拓扑胚图
我们可以使用matplotlib中的pyplot模块里面的Circle对象绘制圆、使用Arc对象绘制弧线使用patches模块中的FancyArrowPatch绘制线段,从而组合成拓扑import matplotlib.pyplot as pltimport matplotlibimport numpy as nplinewidth = 2figure, axes = plt.subplots()draw_circle = plt.Circle((0.5, 0.5), radius = 0.2
2022-03-03 21:04:35 1097
原创 python随机生成licence plate numer
人品不错,摇到了杭州车牌,选车牌嫌麻烦,就用python写了一个车牌自动生成小程序如下import randomdef rand_digit(): return str(random.randrange(10))def rand_midabeta(): midabetas = ['U','E','P','R','T','Y','W','Q','L','F','K','J','G','A','H','Z','C','B','X','N','M'] return random.choice(
2022-01-14 10:18:21 352
原创 使用python暴力破解验证码
一、需求介绍今天遇到一个棘手的问题,就是之前注册某网站的手机号码已经被我弃用了,我也忘记了密码,而改密码需要验证码,验证码发送之后,却接受不到。所以我需要暴力破解。二、破解思路验证码是六位数字,所以一共有100万种可能,我想采用暴力法进行破解,先人肉破解,大概分成以下几个步骤:点击验证码输入框退格键删除之前错误的验证码输入新的验证码点击提交按钮依次循环,直到验证码正确打开网站。人肉输入显然太累了,所以我们需要脚本三、python模拟鼠标和键盘操作我Baidu了一下,发现python中
2021-12-05 19:43:17 7752 8
原创 使用lxml.etree配合Xpath快速爬取100项网页关键词
欧盟委员会(EUROPEAN COMMISSION)发布《面向未来的100项重大创新突破》(100 Radical Innovation Breakthroughs for the future)报告,我们在微信公众号文章中可以看到原文面向未来的100项颠覆性技术创新。现在我有一个需求,就是把这100项技术提取出来,如果手动提取的话,就会比较累,那么我们能不能使用python来进行提取呢?答案是肯定的,只需要使用lxml模块中的etree方法,使用Xpath语法就可以完成这个功能了。第一步:将网页另存到本
2021-11-07 22:18:14 1021
原创 6行python代码使用pdf2docx模块Converter对象将pdf转换为docx文件
pdf转word应是一个很常见的需求,网上有些免费的转换工具,一方面不安全,有文件泄露风险,另一方面有免费转换的次数限制。我们可以使用python的pdf2docx模块来实现这个功能。首先,当然是安装这个模块,过程中会安装一些依赖:$ pip install pdf2docx然后,把需要转换的文件地址和目标路径设置好作为参数传给convert方法就可以啦。from pdf2docx import Converterpdf_file = 'C:\\Users\\wuchenwei\\Deskto
2021-10-22 15:01:21 4285 3
原创 使用python批量压缩图片文件
文章目录一、项目需求二、python实现代码三、实现效果四、参考文献一、项目需求图片太大,导致word文档占用太多内存卡死,需要通过压缩来减小文件的体积。二、python实现代码以下代码用于批量压缩png/jpg格式的图片文件,遇到报错就使用pip大法安装一下对应的类库就可以了。dynamic_quality.pyimport PIL.Imagefrom math import logfrom SSIM_PIL import compare_ssimdef get_ssim_at_qu
2021-10-12 15:14:39 3799 3
原创 用前端三剑客(html+css+javascript)搭建一个最简单的加法器
前端三剑客(html+css+javascript)可以快速部署到浏览器中,所以用他们写的代码比较容易交给其他人用,毕竟现在是2021年,每个人的电脑都有浏览器;不然写个python程序,还需要别人安装python,就比较麻烦了。最简单的一个应用就是做一个加法器,我们用户输入两个数字,点击按钮之后即可得到它们的和并且显示出来。这里涉及到交互式编程,包括对用户输入的获取,数据的处理和数据的显示。我们在这里采用了jQuery来处理交互式编程,注意jQuery可以简单的理解成一个javascript的类库,他封
2021-10-05 13:48:28 1839
原创 使用matlab的appdesigner绘制Steward并联机构
文章目录Step 1: 启动appdesignerStep 2: 创建需要的控件Step 3: 回调函数的编写Step 4: 运行app我们可以使用matlab中的appdesigner工具来制作可视化的工具显示并联机器人的运动。具体的步骤如下所示:Step 1: 启动appdesigner我们直接在matlab的命令行中输入命令appdesigner即可启动appdesigner,启动之后选择空白项目就可以根据自己的需求来新建app。Step 2: 创建需要的控件在appdesigner的左侧
2021-09-03 20:27:11 3808 7
原创 使用matlab的mesh函数绘制3维图形绘制
我们在分析空间的时候,经常会遇到3D绘图的需求,在matlab中有可以直接调用的函数可以直接使用。下面的代码就展示了一个简单的示例。我们看到,代码先使用meshgrid函数生成了网格数组[mu,nu],函数的参数分别是这两个参量的取值范围和取点的数量,假设mu有N个取值,nu有M个取值,这个相当于是生成了N×M点,mu和nu分别为这N×M个点按照顺序排列下来的横纵坐标。然后我们可以使用mu、nu作为参数,使用matlab中的点乘方法计算z的值,这样N×M组mu和nu的值计算除了N×M个z值,这样就得到了
2021-08-31 09:41:47 6578
原创 根据经纬度来计算旋转矩阵
在C.M.Gosslin的《Development and Experimentation of a Fast 3-DOF Camera-Orienting Device》一文中,作者给出了通过相机视角的经度、纬度、扭转来得到相机相对于固定坐标系的旋转矩阵Q0\mathbf{Q_0}Q0的表达式如下:利用三角函数恒等式sin2ν+cos2ν=1\sin^2\nu+\cos^2\nu=1sin2ν+cos2ν=1这个恒等式,该式等价于以下表达式:Q0=[(cos(ν)−1)cos2(μ)+1(
2021-08-23 16:10:49 1127
原创 关于转动的一些专业英语名词
除了pitch/roll/yaw,参考常用无人机RPY坐标系涉及概念总结之外,我们还会在摄像头的运动中看到其他一些关于转动的专业英语名词,如下进行一波解释:Tilt:绕着水平轴进行旋转,参考人的点头动作,本质上和pitch是同一类转动。Pan:整个头绕着竖直轴旋转,参考人的摇头动作,本质上是yaw的子类。Vergence:两只眼球绕着各自的垂直轴旋转不同的角度,产生不同的视差,参考斗鸡眼的动作,本质上也是yaw的子。Version:两只眼睛绕着各自垂直轴旋转相同的角度,维持相同的视差,参考微信表情包
2021-08-17 15:30:10 976
原创 使用GF集进行构型综合的方法之总结
文章目录第一步:数综合第二步:GF分解第三步:支链设计第四步:部件组装第一步:数综合输入参数:9组运动维度移动维度转动维度冗余驱动数支链约束数范围支链数被动支链数过约束数支链驱动数范围输出参数:2组支链约束数分配(约束分配解)支链驱动数分配(驱动分配解)第二步:GF分解输入参数:约束分配解输出参数:支链的GF集第三步:支链设计输入参数:支链的GF集输出参数:支链的运动副组合第四步:部件组装按照集合条件将第三步的支链装配起来即可整个过程可以通过软件自动完成
2021-08-12 12:03:48 775
原创 用python编写Djikstra算法进行机器人路径规划
为了机器人在寻路的过程中避障并且找到最短距离,我们需要使用一些算法进行路径规划(Path Planning),常用的算法有Djikstra算法、A*算法等等,在github上有一个非常好的项目叫做PythonRobotics,其中给出了源代码,参考代码,可以对Djikstra算法有更深的了解。一、算法原理如图所示,Djikstra算法要解决的是一个有向权重图中最短路径的寻找问题,图中红色节点1代表起始节点,蓝色节点6代表目标结点。箭头上的数字代表两个结点中的的距离,也就是模型中所谓的代价(cost)。
2021-08-03 20:41:29 3055 3
原创 多段路径规划的轨迹生成:带有抛物线过渡的线性函数
为了让机器人的轨迹能满足平滑的需求,我们需要做轨迹规划,在许多场合,我们需要使用直线轨迹,然而纯粹直线轨迹是会带来一个无穷大的加速度,这在真实的场景下是无法实现的,因此我们可以引入抛物线(二次函数)来进行平滑的过渡。《机器人学导论》(John J. Craig, 贠超. 机器人学导论[M]. 机械工业出版社, 2006.)一书中的第七章给出了方法,但是其中的一些符号定义的不是很清楚,台大林沛群老师的机器人学(台大机器人学之运动学——林沛群(含课件+书籍))讲的比较清楚,在这里做一个总结。一、基本思路将
2021-08-02 21:27:30 2697 5
原创 为什么北半球的旋涡都是逆时针的
我们在地理课或者理论物理课程中学到过一下的知识点:北半球的旋涡都是逆时针的。比如台风的旋涡、水槽里面流水的旋涡等等。那么这是为什么呢?原因在于地球并非是一个惯性系,因为地球本身在自转,因此以地球为参考系观察,这个系统中的物体将收到一个惯性力,这个惯性力我们定义为科里奥利力FcF_cFc,这个力的大小和方向可以由以下公式来决定:F⃗c=−2mω⃗×v⃗\vec F_c=-2m\vec\omega×\vec vFc=−2mω×v根据矢量叉乘的法则,我们得到以下结论:北半球物体运动时统一受到向右的地转偏向
2021-07-30 14:38:46 5395
原创 刚体的相对运动与机器人连杆的运动
在机器人学中,我们使用以下公式来对如图所示进行不同参考系中运动描述的变换:AVQ=AVBORG+BARBVQ+AΩB×BARBPQ{ }^{A} V_{Q}={ }^{A} V_{B O R G}+{ }_{B}^{A} R{ }^{B} V_{Q}+{ }^{A} \Omega_{B} \times{ }_{B}^{A} R^{B} P_{Q}AVQ=AVBORG+BARBVQ+AΩB×BARBPQ其中AVQ^{A} V_QAVQ表示运动物体QQQ相对于参考物体AAA的运动在参考系{A
2021-07-29 16:06:01 934 1
原创 单纯形法求解线性规划问题
我们来看一个简单的数学规划模型:maxZ=70x1+30x2\max Z=70 x_{1}+30 x_{2}maxZ=70x1+30x2s.t.{3x1+9x2⩽5405x1+5x2⩽4509x1+3x2⩽720x1,x2⩾0s.t. \left\{\begin{array}{l}3 x_{1}+9 x_{2} \leqslant 540 \\ 5 x_{1}+5 x_{2} \leqslant 450 \\ 9 x_{1}+3 x_{2} \leqslant 720 \\ x_{1}, x_{2}
2021-07-26 17:53:52 3171
原创 手动实现李群SE(3)到李代数se(3)之间的对指数运算关系
我们可以推导出以下公式来进行李群和李代数之间的对应转换计算。已知ω⃗\vec\omegaω和v⃗\vec vv,求RRR和ppp,从而获得TTT,对应T=exp(E)T= exp(E)T=exp(E),其中E=upgrade([ω⃗,v⃗])E=upgrade([\vec \omega, \vec v])E=upgrade([ω,v]):已知TTT,可以从其中提取出RRR和ppp,进而可以计算出ω⃗\vec \omegaω和v⃗\vec vv,即E=log(T)E=log(T)E=log(T),[ω⃗
2021-07-22 13:55:48 948
原创 使用numpy实现李代数se(3)和SE(3)之间的指对数映射
SE(3)李群和se(3)李代数元素之间存在着指对数的映射关系(矩阵指数、对数运算关系),对于se(3)李代数,存在着向量形式(六维螺旋向量S)和4×4标准矩阵(E矩阵)两种表达,他们之间可以相互转换,我们把从S转换成E的过程称为升维(upgrade),把E转换为S的过程称为降维(upgrade),那么我们可以简单地得到以下的转换关系示意图:李代数se(3)的螺旋向向量形式和标准4×4表示之间的转换关系比较简单,只需要对其中的角速度向量做一个伴随(反对称)变换即可,然后反对称矩阵和速度向量进行拼接,然后
2021-07-21 19:18:06 1513 2
原创 python中欧拉-罗德里格斯的代码详解
我们可以在python中定义以下函数来完成三维和四维的罗德里格斯公式的数值计算,即统一了旋转运动和一般螺旋运动的Euler-Rodrigues公式:R=eθAs=I+sinθAs+(1−cosθ)As2\mathbf R=e^{\theta \mathbf As} = \mathbf I + sin\theta \mathbf A_s + (1-cos\theta)\mathbf A_s^2R=eθAs=I+sinθAs+(1−cosθ)As2H=eθEs=I+sinθEs+(1−cosθ)Es2\ma
2021-07-21 16:46:18 1324
原创 使用np.set_printoptions设置打印数组格式
我们在终端打印numpy数组结果的时候,有时候会出现一些让人看着很难受的情况,比如:这个时候,我们只需要增加一行设置代码如下,就可以让结果看起来清晰无比:np.set_printoptions(precision=2,suppress=True)我们看到,效果非常明显,舒服。...
2021-07-21 11:43:04 1078
原创 numpy求矩阵的逆和伪逆
我们可以使用np.linalg中的inv和pinv函数来求解矩阵的逆/伪逆。np.linalg.inv对于可逆方阵M,我们使用下面这行代码求逆:np.linalg.inv(J(theta))示例:import numpy as npM = [ [0.866,-0.5,0], [0.5,0.866,0], [0,0,1]]print(f"The inverse of M is \n{np.linalg.inv(M)}")当然也可以为了可读性在import的时候直接从numpy.li
2021-07-20 14:48:36 4904
原创 将numpy数组根据分段区间进行三值化处理
现在有一个对数组Z处理的需求,要求将其中的元素中大于2/3的数字置1,小于1/3的数字置-1,中间段的数字置0我们分析之后不难得到以下方案:import numpy as npimport randomZ = np.array([ [0.1,0.2,0.3], [0.4,0.5,0.6], [0.8,0.9,0.7], ])def trivalurize(M): return (M>=1/3).astype(int)-(M<=2/3).astype(int)prin
2021-07-18 23:13:27 704 4
原创 坐标变换中旋转矩阵的前乘和后乘
我在旋转矩阵的两种用法一文中提出了关于RRR的两个基本变换关系:旧坐标=R∗新坐标(坐标转换公式)旧坐标=R*新坐标(坐标转换公式)旧坐标=R∗新坐标(坐标转换公式)新向量=R∗旧向量(向量转移公式)新向量=R*旧向量(向量转移公式)新向量=R∗旧向量(向量转移公式)这两个公式便于记忆,但是不够严谨,严谨地用数学公式表示,我们可以写成:[0x,0y,0z]T=R∗[1x,1y,1z]T[^0x,^0y,^0z]^T = R*[^1x,^1y,^1z]^T[0x,0y,0z]T=R∗[1x,1y,1z]T[i
2021-07-18 22:25:55 3314
原创 使用subs和evals函数对sympy中的符号进行赋值并且设置数值位数
我们在使用sympy进行符号计算之后,很多时候需要代入具体的数据进行数值计算,这个时候,我们就需要使用subs函数用具体的数字替换掉原来的变量;在三角计算中,我们常会用到π\piπ,而我们在计算机中希望转换成小数(浮点数),那么我们可以使用evals这个函数来进行小数点的设置。我们来看一下示例代码:注意到,我们以元组的列表的形式给subs传递了参数对,然后用chop参数设置了保留小数的位数,这些都是非常有用的参数。import numpy as npimport sympy as symfrom s
2021-07-18 12:26:19 4065
原创 使用sympy.latex在jupyter notebook中显示latex风格公式
我们可以使用sympy中的latex函数对数学表达式进行转换,转换为latex,然后复制到markdown格式单元格中运行就可以了:示例代码如下:import numpy as npimport sympy as symfrom sympy import sin,cos,pideg = pi/180def Rx(alpha): return sym.Matrix([ [1,0,0], [0,cos(alpha),-sin(alpha)],
2021-07-18 12:15:28 4513
原创 用python证明角位移不是矢量
文章目录一、角位置、角位移的概念二、角位移不是矢量的证明三、正确的角位移变换关系一、角位置、角位移的概念我们可以引入角位移矢量来表示一个刚体的姿态/方位(attitude/orientation),这种方法不是唯一的,我们在研究空间转动的时候,有多种方法,比如欧拉角、四元数、旋转矩阵等等。我们可以假设一个刚体初始的位姿和空间指教坐标系重合,也就是和物体固连的刚体坐标系x、y、z轴刚好和世界坐标系的x、y、z轴重合。如果这个物体因为绕轴线(假设轴线的单位向量为A⃗\vec{A}A,其中A是Axis的首字母
2021-07-17 12:52:05 743 2
原创 利用python程序深入理解齐次转移矩阵T
在机器人学中,齐次转移矩阵(Homogeneous Transmission Matrix)是一个很重要的概念,它可以用来表示一个刚体的位姿信息,也可以用来进行不同坐标系之间的坐标转换。我们假设TsbT_{sb}Tsb为刚体b(body)相对于固定空间s(space)的转移矩阵,我们就可以按照以下法则把body中的坐标转换为space中坐标,即 Xs=Tsb∗XbX_s = T_{sb} * X_bXs=Tsb∗Xb,这个矩阵TsbT_{sb}Tsb就是齐次转移矩阵,我们可以把它看成是一个用于坐
2021-07-16 17:44:01 1833
原创 旋转矩阵和角速度之间的关系
假设刚体的位姿可以用旋转矩阵RRR来表示,某个瞬时时刻,刚体沿着单位轴s⃗\vec{s}s以角速度ω\omegaω旋转,假设在dTdTdT时间内旋转了dθd\thetadθ角度,那么我们可以证明以下公式:ω[s⃗]=R˙RT\omega [\vec{s}]=\dot{R}R^Tω[s]=R˙RT=limdT→0R(T+dT)−R(T)dTRT=\lim\limits_{dT\rightarrow0}\frac{R(T+dT)-R(T)}{dT}R^{T}=dT→0limdTR(T+dT)−R(T)RT
2021-07-15 22:33:19 4235
原创 向量的三重积公式及其证明(附python代码)
向量的三重积公式是经常会在向量代数中使用到的恒等式,它的表达形式如下所示:a⃗×(b⃗×c⃗)=(a⃗⋅c⃗)b⃗−(a⃗⋅b⃗)c⃗\vec{a}\times\left(\vec{b}\times\vec{c}\right) = \left(\vec{a}\cdot\vec{c}\right)\vec{b}-\left(\vec{a}\cdot\vec{b}\right)\vec{c}a×(b×c)=(a⋅c)b−(a⋅b)c我们可以使用以下python代码来进行证明(我们对上式稍微变形一下证明这个恒等
2021-07-15 17:52:42 5538 4
原创 通过有向图的可达矩阵判断有向图的连通类型
我们根据有向图的连通情况,可以将图分成四种类型非连通图弱连通图单向连通图强连通图我们可以通过邻接矩阵A,计算可达矩阵B,然后经过二值化之后得到可达性矩阵P来判断该图属于以上哪一种。如果P中元素都为1,说明任意两点之间都可达,那么这是一个强连通图;如果P′=P∪PTP' = P \cup P^TP′=P∪PT除对角线之外全为1,说明任意两个点之间存在可达通路,那么这是一个单向连通图;如果A′=A∪ATA' = A \cup A^TA′=A∪AT作为邻接矩阵,然后求得可达矩阵所有元素为1,
2021-07-08 16:28:42 6561
原创 使用numpy中的matmul方法计算矩阵乘法
我们在线性代数中学过的矩阵乘法比较特殊,需要对应的行列向量点乘之后累加,如以下公式所示:mij=∑k=1naikbkjm_{ij}=\sum_{k=1}^na_{ik}b_{kj}mij=k=1∑naikbkj假设mijm_{ij}mij为矩阵MMM中第iii行第jjj列位置上的元素,MMM的尺寸为a×ba×ba×b,aika_{ik}aik为矩阵AAA中的元素,AAA的尺寸为a×na×na×n的矩阵,bkjb_{kj}bkj为矩阵BBB中的元素,BBB的尺寸为n×bn×bn×b的矩阵,并且他
2021-07-07 17:29:57 1436 3
原创 对流形(Manifold)的最简单快速的理解
文章目录引言:流形的初步概念流形的性质之一:连续性流形的性质之二:局部坐标转移性流形的性质之三: 可微性一些流形的例子1.闭合曲面2.克莱因瓶3.射影平面4.射影空间PnP^nPn5.Grassmann流形引言:流形的初步概念在学习李群的时候,我们会听到的第一句话就是“李群是群,同时也是流形(Manifold)”。第一次听到流形的时候,感觉这个名字很fashion,但是又非常疑惑,到底什么东西才是流形呢?带着这样的疑惑,我参考不少教材、书本、论文以及视频,都么有得到一个快速而准确的解释。直到看到了下面这
2021-06-23 12:19:57 21479 5
原创 使用有限位移旋量矩阵N实现刚体位移的计算
本博客使用numpy模块来实现戴建生《机构学与机器人学的几何基础与旋量代数》一书5.9节《有限位移旋量表示的Chasles运动分解》第一部分“实现缸体位移的伴随作用”中例5.3的全过程。对应的代码如下:import numpy as npfrom numpy import cos,sin,pi#已知变换前的刚体上某条线的位姿旋量L,过原点旋转轴的方向s和转角theta,以及刚体的平移向量d#求变换之后刚体上直线的位姿旋量LpL = [0.707,0.5,0.5,0.5,-1,0.293]
2021-06-18 12:12:47 749 1
原创 力学中的约束分类
一、几何约束v.s.微分约束这两种约束的核心区别在于几何约束(geometric constraint)仅仅是对物体的位置坐标进行了约束,而微分约束则引入了速度维度,约束方程中包含了位置对时间的导数的项。所以我们看到一个约束方程中包含速度项x˙\dot{x}x˙,那么这个约束就升级为了微分约束(differential constraint)。二、可积分约束v.s.不可积分约束对于微分约束,如果满足可积性条件,能够表示成等价的积分形式,则称为可积约束(Integrable constraint),可积
2021-05-19 12:28:37 10557 2
surnames.csv
2020-07-03
girlsnames.csv
2020-07-03
boysnames.csv
2020-07-03
vivid_alphabet.csv
2020-02-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人