精华内容
下载资源
问答
  • css绘制不规则图形

    千次阅读 2018-12-16 18:46:09
    CSS绘制不规则图形

    CSS绘制不规则图形

    在实际开发中,经常会遇到绘制图形(图标)的需求,比如:箭头图表、不规则图形、规则图形;


    常见方法

    • 对于图形的实现,可以大体上分为几种做法

    (1) 背景图片,请UI小姐姐帮你吧……此处略过;

    (2) CSS3的属性:圆角、透明度、变形、边框、伪类等属性实现;

    (3) 渐变属性:通常使用线性渐变实现切角;

    (4) 裁剪属性:

    (5) Canvas实现:

    • 比较
    方法 描述 适用性 优点 缺点
    背景图
    CSS3属性
    渐变属性
    图像裁剪
    Canvas

    一、背景图实现

    背景图存在的问题:

    • 占用资源较大,修改维护不方便,灵活性不足;

    二、CSS3属性:图形实现

    大体可以划分为:

    • 三角形系列:三角形、倒三角、左三角、右三角、左上三角、右上三角、左下三角、右下三角;
    • 圆形系列:圆形、椭圆、扇形、圆环、月牙、蛋形
    • 四边形系列:正方形、长方形、菱形、平行四边形、梯形、直角梯形
    • 多边形系列:五边形、钻石、六边形、八边形、
    • 特殊形状:心形、无穷大符号、食人豆、太极图
    • 星形系列:五角星、六角星、八角星、十二角星
    • 实际需求:对话框

    示例代码:

    width="100%" height="300" src="//jsfiddle.net/Bumphy/t6L3b9as/embedded/result,html,css/dark/" allowfullscreen="allowfullscreen">

    三、渐变属性

    渐变分为:径向渐变、线性渐变;

    关键是掌握三个要素:

    • 渐变线(gradient line)
    • 渐变线上的起始点(starting point)和结束点(ending point)
    • 在起始点和结束点上的颜色值

    推荐阅读:深入理解 CSS linear-gradient

    width="100%" height="300" src="//jsfiddle.net/Bumphy/nm8chkfj/5/embedded/result,html,css/dark/" allowfullscreen="allowfullscreen">

    四、图像裁剪

    谈到,图片裁剪,有两个属性,clipclip-path 。其实clip-pathclip的替代属性。

    由于clip属性已经被从web标准中移除了,所以这里就不介绍它了,无情地抛弃它了。

    如果对clip感兴趣,具体可以看这里

    这里,我们主要来了解一下clip-path属性。

    clip-path属性可以用于通过裁剪图片,来显示期望中的图片形状。

    先让我们来看几个例子:

    width="100%" height="300" src="//jsfiddle.net/Bumphy/pyd4suo2/embedded/result,html,css/dark/" allowfullscreen="allowfullscreen">
    • 适用性:所有元素;在SVG中,它适用于除defs元素和所有图形元素之外的容器元素;

    • 取值:

    /* Keyword values */
    clip-path: none;
    
    /* Image values */ 
    clip-path: url(resources.svg#c1);
    
    /* Box values */
    clip-path: fill-box;
    clip-path: stroke-box;
    clip-path: view-box;
    clip-path: margin-box
    clip-path: border-box
    clip-path: padding-box
    clip-path: content-box
    
    /* Geometry values */
    clip-path: inset(100px 50px);
    clip-path: circle(50px at 0 100px);
    clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
    
    /* Box and geometry values combined */
    clip-path: padding-box circle(50px at 0 100px);
    
    /* Global values */
    clip-path: inherit;
    clip-path: initial;
    clip-path: unset;
    

    这么多取值,完全分不清呀喂!!!没关系,来个示例肿么样?

    一个有意思的网站

    变形之css shapes

    CSS Shapes 标准定义了可以被 CSS 属性值使用的图形描述方法。

    标准目前主要有两个版本。当前标准为第一版,第二版还在迭代过程之中。

    该标准的第一个版本主要包含 3 个属性:shape-outsideshape-image-threshold以及shape-margin

    shape-outside可以实现内容能绕着不规则几何图形排列。

    取值:

    circle函数:定义一个正圆。可以指定半径和圆心位置。 对于半径,只能接受非负数,负数不允许。默认地,使用短边作为直径。 如果使用百分数,百分数的定义是 sqrt(width2+height2)/sqrt(2)。几何定义为:“对角线长度与单位面积对角线长度的比值”。 有两个快捷值可以设置:closest-side和farthest-side 圆心位置默认为中心,如果需要指定须以at引导的数据。此数据可以是百分数或这 center/left/right 的组合。 完整的参数形如:circle(100px at center 25%)

    ellipse函数:定义一个椭圆。和circle函数的参数大致一样。指定半径时候可以指定两个参数。椭圆函数的长轴和短轴只能在宽度方向和高度方向产生。如果指定的话,就是依次指定水平和垂直的半径。 完整的参数形如:ellipse(100px 200px at center 25%)

    inset函数:定义一个内部矩形。这个矩形可以把周围的内容放进去。参数有两个,一个是矩形的上右下左的百分比坐标,类似与margin的指定原则,但必须是百分数。第二个参数为这个矩形的 border 半径,以round引导。 完整的参数形如:ellipse(0% 66% 1% 1% round 50%)

    polygon函数:表示一个封闭的多边形区域。语法为:polygon(X1 X1, … , Xn Yn)。意思是由 N 个点构成的多边形。Xi 和 Yi 代表每个顶点所示的坐标,坐标可为像素值或者百分比。Xi,Yi与Xi+1,Yi+1即为相邻顶点的边。Xn,Yn与X1,Y1也是连接的。

    对于多边形,存在有多种填充逻辑,用于判定一个点在多边形的“内部”还是“外部”。目前标准支持两种,这与 SVG 标准一致。

    nonzero:按该规则,要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点情况。从 0 开始计数,路径从左向右穿过射线则计数加 1,从右向左穿过射线则计数减 1。得出计数结果后,如果结果是 0,则认为点在图形外部,否则认为在内部。

    evenodd:按该规则,要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点的数量。如果结果是奇数则认为点在内部,是偶数则认为点在外部。

    默认地,标准指定为nonzero。如果是evenodd可以在polygon函数中传第一个参数。

    在线工具

    shape-image-threshold
    这个属性一般和shape-outside联合使用,此时,shape-outside的属性应设置为一张图片。此时,shape-image-threshold 用于从图像中提取形状的阈值。形状由 alpha 值大于此阈值的像素定义。

    .el{
    	shape-outside: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/123941/css-shapes-9.jpg);
      	shape-image-threshold: 0.0;
    }
    

    此处需要注意:

    不能使用file:协议进行测试。
    注意同源策略。
    未来的协议可能会倾向使用图片数据的亮度来取代目前的 alpha 通道。为此会提供一个开关选项。未来同时兼容这两种值的时候,究竟是亮度还是 alpha 通道,取决于这个开关选项值的状态。

    shape-margin
    shape-margin表示在 CSS 形状的浮动区域周围添加空白区域来避免周围内容和形状区域重叠。下面的代码是一个使用的例子。

    .float {
        shape-outside: polygon(10px 10px, 90px 50px, 40px 50px, 90px 90px, 10px 90px);
        shape-margin: 10px;
    }
    

    shape-margin可以为:px、em、rem、百分比或者 calc()函数值。但必须为非负数。下面展示了几个可能的取值:

    shape-margin: 10px;
    shape-margin: 1em;
    shape-margin: 5%;
    shape-margin: calc(2em - 1px);
    

    引用
    形神兼备——谈谈CSS Shapes

    展开全文
  • 使用CSS 3创建不规则图形

    千次阅读 2013-11-14 11:04:40
    我希望这篇文章能让你对不规则图形有一个初步的了解。 现在,我们已经可以使用CSS 3 常见不规则复杂图形了(点击链接查看),如下图所示: 使用CSS创建的图形,无法内置文字或实现文字环绕效果。因此,如何实现...

    前言

    CSS 创建复杂图形的技术即将会被广泛支持,并且应用到实际项目中。本篇文章的目的是为大家开启它的冰山一角。我希望这篇文章能让你对不规则图形有一个初步的了解。

    现在,我们已经可以使用CSS 3 常见不规则复杂图形了(点击链接查看),如下图所示:

    image

    使用CSS创建的图形,无法内置文字或实现文字环绕效果。因此,如何实现不规则图形和文字复杂布局也成为了一个热议话题。

    今天我们就来介绍一下如何实现这个效果。文章中我们将阐述如何使用 CSS创建不规则图形,实现不规则的文本布局。学会如何创建不规则图形之后,你就可以发挥想象力,创建唯美的CSS页面了,下图既是使用该技术创建的《爱丽丝梦游仙境》效果图:

    image

    注:这是CSS的最新技术,所以对浏览器版本要求较高。如果需要查看在线示例你需要确保浏览器支持这个CSS技术。在本文中我也将提供一些效果截图查看效果。

     

    声明图形

    我们需要使用shape-outside 属性声明不规则图形。当前, shape-outside 属性只能被应用于浮动元素,并且只能应用于块级元素。如果需要在非块级元素上使用这些属性,必须先把元素声明为块级。

    Shape-* 值有三种赋值方式: 自动,基本图形或者图片链接。如果被设置为自动,浮动元素将继续作为传统的盒模型进行渲染。如果你还不熟悉盒模型,请参考CSS盒模型,这是阅读本篇文章的基础。

    绘制方法包括:rectangle、inset-rectangle、circle、ellipse或polygon方法等。你可以通过链接查看详细的描述。

    如果属性被设置为图片链接, 浏览器会按照图片的“alpha通道”来绘制图形形状。

     

    在元素上创建坐标系

    声明了CSS 图形之后,我们首先需要创建将用于绘制图形的坐标系。

    坐标系是非常必要的,因为图形需要依据此坐标系上的点阵进行绘制。shape-* 属性是基于盒模型的,为了使它启作用,需要明确指定盒子的大小,限制不规则图形在盒子范围内,它也将被用于创建绘制坐标系,坐标系的起点位于形盒子左上角。如果没有明确宽和高声明, shape-* 属性将不启作用。

     

    设置自定义图形的背景色

    应用了自定义图形,它的盒模型仍然存在,其它传统的样式设置将作用于盒模型范围。例如,下面这个例子中,

    我们仅仅想创建一个浮动圆形,并设置这个圆形的背景色。按照正常的思路理解,效果应该是这样的:

    image

    但是当设置了盒子的背景色后,你会发现和预期的效果不同,效果如下:

    clip_image001

    在上图中我们看到背景色被应用到盒模型范围,而不是我们预想的圆形内。

    那么,我们应该怎样设置圆形的背景色呢?这就引出了一个新的CSS样式: clip-path 。clip-path 用于限制当前样式的作用范围。在下面的例子中你将看到它的使用方法。 

    提醒

    现在,shape-outside 属性只作用域浮动的元素,并且仅限制于在块级元素上应用。使用这些属性定义的元素,其周围的文本将依赖于图形形状排布。未来的CSS 形状将不仅仅限制与应用于浮动元素上,我们将不仅仅可以在文本外部的图形上做文章,完全可以在其内部定义自定义图形,实现如下效果:

    image

    实例-使用shape-outside 创建环绕于自定义形状的浮动文本

     

    我们从一个简单的例子开始。在实例中我们将创建一个自定义图形,并且内置文本流,最终效果图如下(文章末尾提供实例下载链接):clip_image002

     

    例子中我们拥有两个容器,用于设置自定义形状和嵌套文本内容。代码如下:

    <div class="container">
    
      <div class="shaped"></div>
    
      <div class="content">
    
        <h1><span>La</span> Tour <br/>Eiffel</h1>
    
        <p>Lorem Ipsum.....</p>
    
      </div>
    
    </div>

     

    首先我们需要声明浮动区域的DIV节点,并且使用固定值设置大小。代码如下:

    .container{
    
      overflow:hidden;
    
      height: 100vh;
    
      width: 100vw;
    
    }
    
    .shaped{
    
      float:left;
    
      height:100vh;
    
      width:40vw;
    
      float:right;
    
      background: black url(../images/eiffel.jpg) center top no-repeat;
    
      background-size:cover;
    
    }

     

    现在坐标系已经创建成功,接下来我们将要绘制图形了。可以通过两种方式来绘制图形:

    使用polygon()

    我们可以使用polygon() 方法来计算图形范围。这个方法从坐标系中获取多个点用于绘制图形,每个点由(x, y)值定位。 例子中我们将要创建一个非常简单的多边形,如下图所示:

    clip_image002[7]

    坐标点的单位可以是固定值,或者百分比。在这个例子中我们将以百分比的形式设置点阵位置。接下来我们需要应用这个样式在浮动元素上。

    .shaped{
    
    /*…*/
    
      shape-outside: polygon(0 0, 100% 0, 100% 100%,30% 100%);
    
      shape-margin: 20px;
    
    }

     

    应用以上的样式后,一个不规则的图形-梯形产生了。

    可以看到代码中使用了shape-margin 属性,它用于设置图形和文本内容之间的边距。

    接下来需要添加背景图,需要注意在添加背景图之后,它将被应用于盒模型,目前为止效果如下:

    clip_image002[9]

    所以,为了达到预期效果,我们需要设置clip-path 属性,并且设置其范围和shape-outside 属性相同。

    .shaped{
    
    /*…*/
    
      clip-path: polygon(0 0, 100% 0, 100% 100%,30% 100%);
    
    }

     

    现在,我们就通过polygon() 方法实现了目标效果。

     

    使用图片链接

    我们也可以通过图片(严格说是拥有通明区域的图片)来创建不规则图形,依据图片的“alpha通道” 生成不规则图形。

    例如,替代polygon() 声明方法。我们可以设置shape-outside 属性值为图片URI,浏览器就会自动依据图片来绘制不规则图形。

    clip_image002

    图片中的透明部分将被声明为文本元素的浮动部分。其余部分被声明为不规则图形。代码如下:

    .shaped{
    
    /*…*/
    
      shape-outside: url(/images/mm.png);
    
      shape-image-threshold: 0.5;这个属性用于设置浮动区域透明度范围
    
    }

     

    上述的两种方法都拥有各自的优缺点。例如,如果图形过于复杂,通过图片方法比手动计算图形绘制节点更方便。

     

    源码下载

    展开全文
  • Android自定义View之不规则图形填充

    千次阅读 2017-08-22 11:50:29
    Android自定义View之不规则图形填充最简单的实现方式

    最近项目遇到了一个统计图的需求,折线图部分需要填充图案,这就涉及到了一个不规则图形填充的问题,考虑了几种方法,最后还是选了一种我觉得最简单的方案——利用Shader类。

    先上一下效果图,十分简单的线,我用了贝塞尔曲线来表示完全可以填充不规则的直线和曲线。



    接下来上代码来分析。代码超级简单,只有几行



    其中onDraw部分几乎不用看,我用贝塞尔画了一条不规则的曲线而已,重点是在init()方法,创建一个Shader对象,其中BitmapShader构造器的第二个和第三个参数分别是图片的横向和纵向的填充方式,TileMode是个枚举类,有三个枚举,分别是CLAMP, REPEAT, MIRROR。其中,CLAMP是多出的部分利用bitmap的边缘色填充,REPEAT是重复填充,MIRROR是镜像填充。很好理解,自己试验一下就可以发现区别。

    展开全文
  • 0)将我的不规则图形看作尽可能大的矩形,用这个矩形来近似处理该不规则图形。 1)用一个队列,记录下每次鼠标的点击位置,也就是每个图形生成的坐标。 2)每次点击鼠标,均进行判定 若 该位置在...
  • qt button以及label实现不规则图形

    千次阅读 2016-04-25 17:28:21
    1、方法1:准备一张边界是透明的不规则图形  QPushButton * pbtn = new QPushButton;  pbtn->setStyleSheet("QPushButton{border:0px;}");//这句务必加上,否则看到的就是矩形了,而不是不规则图形了  pbtn-...

    1、方法1:准备一张边界是透明的不规则图形

         QPushButton * pbtn = new QPushButton;
        pbtn->setStyleSheet("QPushButton{border:0px;}");//这句务必加上,否则看到的就是矩形了,而不是不规则图形了
        pbtn->setText("aaa");
        pbtn->setIcon(QPixmap("://louDong.png"));
        pbtn->setIconSize(QPixmap("://louDong.png").size());
        pbtn->resize(QPixmap("://louDong.png").size());

        效果如下:

    方法2:

        QPushButton * pbtn = new QPushButton;
        pbtn->setFixedSize(QPixmap("://louDong.png").size());
        pbtn->setStyleSheet("border-image:url(://louDong.png)");


    方法3:

            QPushButton * pbtn = new QPushButton;
        pbtn->setFixedSize(QPixmap("://louDong.png").size());
        pbtn->setIcon(QPixmap("://louDong.png"));
        pbtn->setIconSize(QPixmap("://louDong.png").size());
        pbtn->setMask(QPixmap("://louDong.png").createHeuristicMask());  //不过该方法效果并不好,能看到button的边缘有锯齿,createHeuristicMask换成mask也是一样。


    方法4:

        继承qpushButton,重写paintevent,在里面可以设置mask或者通过qpainterPath自己构造不规则轮廓,代码如下:

       //重绘事件,构造不规则图形
    void DownloadMaskWidget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this); //创建painter
        painter.setRenderHint(QPainter::Antialiasing, true); //消除锯齿效果

        //构造painterpath
        QPainterPath path;
        path.moveTo(0, 0);
        path.lineTo(DOWNLOAD_MASK_WIDTH, 0);
        path.lineTo(DOWNLOAD_MASK_WIDTH/2, DOWNLOAD_MASK_HEIGHT);
        path.lineTo(0, 0);

        //path->setFillRule(Qt::WindingFill);
        //设置无画笔,避免边框出现一条黑线
        painter.setPen(Qt::NoPen);
        //设置画刷
        painter.setBrush(QBrush(QColor(36,169,225), Qt::SolidPattern));
        //绘制背景
        painter.drawPath(path);

        event->accept();//不再向父类传递消息
    }

    方法5:

         对于qlabel,pLabelUnInstallingIcon->setFixedSize(40,40);
        pLabelUnInstallingIcon->setScaledContents(true);
        pLabelUnInstallingIcon->setPixmap(QPixmap(iconPath));

        这样,可以保证图片不失真,如果用pLabelUnInstallingIcon.setPixmap(QPixmap(iconPath).scaled(40,40))的话可以看到label的边缘有锯齿


    转载自:http://blog.csdn.net/u013281495/article/details/50894096

    展开全文
  • 需求 绘制一个不规则图形并能响应点击事件 思路 1.使用CAShapeLayer绘制图形 ...1.画出不规则图形的path: private func createPolygonPath() -> CGPath { let path = UIBezierPath() path.move...
  • MFC填充任意不规则图形

    千次阅读 2013-06-03 16:00:34
    以前遇到一个项目就是任意不规则图形的颜色填充DC最好使用memdc pdc->BeginPath(); .....//dosomething(绘制不规则图形 需要闭合图形) pdc->EndPath(); Crgn rgn; rgn.CreateFromPath(pdc); pdc->InvertRgn(&...
  • Unity使用bounds绘制不规则图形边框 for (int i = 0; i < screenList.Count; i++) { if (screenList[i].activeSelf == true) { Bounds bounds = screenList[i].GetComponent().mesh.bounds; float x = bounds....
  • android偶尔会有排列不规则图形的需求,比如平行四边形,梯形等。 对于这些图形,往往会有点击、动画等需求,需要在View本身的绘制和触摸事件上都做一些单独的处理。 本文以平行四边形为例子,记录下对不规则图形的...
  • iOS在view中绘制不规则图形

    千次阅读 2017-07-13 12:04:44
    iOS绘制不规则图形,可以设置各个经过的点,以及是否有边框,是否有填充色等。
  • Matlab 求不规则图形的 内切圆和外接圆 函数

    千次阅读 热门讨论 2020-08-24 20:09:34
    %% 此函数用于计算已知边界的不规则图形的最大内切圆和最小外接圆 % 输出: % zhongxin1 最大内切圆圆心 % zhongxin2 最小外接圆圆心 % smallR 最大内切圆半径 % bigR 最小外接圆半径 % 输入: % bianjie 不规则图形...
  • Python数据可视化之填充不规则图形的思路 核心思想:点动成线,线动成面。 以下图为例,要求填充扇子的扇面部分。 一、绘制扇子: 首先要弄清楚它的结构,即能够用代码把扇子绘制出来。(只有先把不规则图形的...
  • iOS 绘制不规则图形,并且添加点击事件 http://download.csdn.net/detail/zaiwei123456/9503343 点击前效果 点击后效果
  • 一个点是否在不规则图形内的判定

    千次阅读 2015-05-08 15:37:30
    在开发过程中遇到一个点是否在一个区域内,如果是一个矩形区域比较好判断,但是遇到不规则图形就比较麻烦。 1.分割矩形 在不规则区域内分隔出一个或者多个矩形,累加判定。 或者在不规则区域外外接一个矩形,如图...
  • 不规则图形点击事件的识别 更好

    千次阅读 2016-05-21 17:38:46
    不规则图形点击事件的识别 更好 问题 最近要在iPad上实现一个很独特的功能,简单描述一下就是要显示一个带有半透明背景的弹出界面,在其上加一个不规则形状的图片,手指点击这个弹出界面的半透明区域就...
  • 在使用echarts的过程中发现,echarts中的不规则图形,对于鼠标的事件监听是非常的准确的。 以前的我非常愚蠢的以为,任何图形的事件判断只是去判断canvas图形所在的一个近似大小的矩形中进行的判断。 通过现象看...
  • JAVA实现不规则图形界面

    千次阅读 2017-10-26 14:11:53
    JAVA做图形界面是短处,所以也不建议大家用JAVA做界面开发,我也仅仅简单介绍不规则界面的实现方法。
  • canvas画不规则图形

    千次阅读 2020-04-01 15:19:32
    <template> <div class="test" style="position: relative;"> <canvas id="myCanvas" ref="myCanvas" width="460" height="240">... 您的浏览器支持 HTML5 canvas 标签。 </canvas> ...
  • 写这篇文章也是由于公司让我作一个非常困难但是非常炫的键盘开始的。本身我对绘图就不怎么明白,这不是赶鸭子上架...Path 是android 提供给我们绘制多边形和不规则图形的工具,其中不规则图形由直线和贝塞尔曲线构成。
  • Android自定义View实现不规则图形(6边形) ,可将其做为背景并在上面放置图片,或可将其用作特殊的按钮。实现了滑动功能(点击功能和放缩功能有待实现)public class custom extends View { private Bitmap bitmap=...
  • ![想改变五角星的颜色,不是一下子变成红色,而是一点一点的用线涂上去,但是能改变黄线...想改变五角星的颜色,不是一下子变成红色,而是一点一点的用线涂上去,但是能改变黄线和五角星间的颜色,请问有什么思路么
  • 不规则图形面积的计算

    千次阅读 2020-07-05 16:37:51
    用python测量实际的物体大小————拟合椭圆计算面积 python计算不规则图形面积算法
  • 使用canvas画不规则图形

    千次阅读 2014-11-03 14:37:46
    一是用svg来解决不规则图形的问题,但是貌似这种东西对于我们来说属于嵌入式开发了比较麻烦,二是用CSS3提供的新属性方法transform来解决问题,transform提供了三种操作元素的属性。  matrix,translate...
  • Android 不规则图形点击区域判断

    千次阅读 2016-03-28 15:03:12
    本文介绍一种利用 三角函数角度 及... ... 1.首先在初始化图片iv_bg后,测量iv_bg的坐标,得到图片的中心坐标: ViewTreeObserver vto2 = iv_bg.getViewTreeObserver();...vto2.addOnGlobalLayoutListener(new OnGl...
  • CSS3绘制不规则图形(一)

    万次阅读 多人点赞 2018-07-14 17:44:31
    由于近期的项目中出现了不规则的边框和图形, 所以只好提前先温习一下,以前收集的一些CSS3绘制的图形。。。样式绘制的图形比图片的性能要好,体验更佳。废话不多说,我们直接看效果:1、三角形系列(三角形、倒三角...
  • Unity3D NGUI 给2D不规则图形加碰撞盒

    千次阅读 2016-09-25 15:01:56
    但是碰到特殊情况,比如制作地图板块点击,都是不规则图形,就需要进行一下简单的设置。在网上查了一些大家的做法,大多是用添加Polygon Collider2D不规则碰撞盒的方式再配合NGUI发送射线来实现。不过之前的教程都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 177,790
精华内容 71,116
关键字:

不规则图形