精华内容
下载资源
问答
  • 辅助线的概念 绘制线规则 捕捉辅助线的思路 生成辅助线的思路 总结 在实际绘制几何图形过程时,有几个工具比较实用: 鼠标绘制时,焦点捕捉已绘制图形的端点、线段上; 撤销与回退 辅助线 焦点捕捉的功能的...

    目录

    辅助线的概念

    绘制线规则

    捕捉辅助线的思路

    生成辅助线的思路

    总结


    在实际绘制几何图形过程时,有几个工具比较实用:

    1. 鼠标绘制时,焦点捕捉已绘制图形的端点、线段上;
    2. 撤销与回退
    3. 辅助线

    焦点捕捉的功能的思路相对比较简单,不断地比较当前鼠标所在的屏幕像素点为圆心,R为半径的搜索圆与绘制图形的端点和线段是否相交的问题。但在实时的图形编程的难点在于细节,至于如何优化搜索的速度,有很多方法,涉及比较深的图形搜索方法,比如对所有的图形空间先建立R树空间索引,这里不做详细介绍。

    撤销与回退的功能则更加简单,其实就是状态管理,入栈和出栈的问题。

    接下来,我们讲述一下在绘制过程中是辅助线的实现思路

    辅助线的概念

    辅助线分为静态辅助线和动态辅助线。

    • 静态辅助线是指一直摆放在屏幕上不动的辅助线,鼠标能捕捉到上面,比如PS的辅助线。

    • 动态辅助线是指在绘制过程中,根据已绘制的内容,智能的生成辅助线,并能让鼠标捕捉到上面

    绘制线规则

    1. 鼠标在移动过程中,在指定的阈值范围内能捕捉到辅助线上的最近的点
    2. 每次绘制端点后,能够根据新生成的端点,生成一条相同方向和正交(相互垂直)的辅助线(根据需要生成指定角度的辅助线)
    3. 在绘制完成后,清除辅助线。

     

     

    捕捉辅助线的思路

    鼠标在屏幕移动过程中,在辅助线附近时,能够捕捉到辅助线是指鼠标的绘制焦点能自动移动到辅助线上,实际移动的是绘制焦点而不是鼠标点。而实现捕捉到辅助线,需要以下两步:

    1. 计算当前绘制焦点与辅助线的最短距离是否少于定义的阈值A(A是一个相对于比较小的值),若少于阈值A,则绘制焦点设置为辅助线上离当前绘制焦点最近的点。

    因此,关键的地方,在于获取点到线段的最近的点,以及点与点之间的距离。核心代码如下:

    /**
     * @desc 此方法既获取点到多段连续的线段中最近的点,以及返回最短的距离
     * @param {Array<number>} coordinates 多段连续的线段的坐标数组.[x1,y1,x2,y2,x3,y3...]
     * @param {number} offset 起始点的索引偏移量.
     * @param {number} end 终点的索引.
     * @param {number} stride 坐标所占的个数,二维图形为2.
     * @param {number} maxDelta 多段连续的线段中每两个相邻点中最长的那一段的距离的平方.
     * @param {boolean} isRing 是否是环, 线段是否闭合.
     * @param {number} x 目标点的x坐标.
     * @param {number} y 目标点的y坐标
     * @param {Array<number>} closestPoint 输出的最近的点的对象.
     * @param {number} [minSquaredDistance=Infinity] 最小的垂直距离,用于较少比较.默认Infinity
     * @return {number} 点到多段连续的线段中最短的距离.
     */
    function assignClosestPoint(coordinates, offset, end, stride, 
        maxDelta, isRing, x, y, closestPoint, minSquaredDistance) {
      if (offset == end) { // 如果起点的索引和终点索引的一致,表示参数错误
        return minSquaredDistance;
      }
      let i, squaredDistance;
      if (maxDelta === 0) { // 如果最大的相邻点间的距离为0,表示线段各个点为同一个点
        // 所有点都相同,所以只需测试第一点
        squaredDistance = squaredDx( // squaredDx方法获取两点之间的垂直距离的平方
          x, y, coordinates[offset], coordinates[offset + 1]);
    
        if (squaredDistance < minSquaredDistance) { // 如果绘制焦点与线段第一个点的距离少于定义的最小距离,则最近的点为线段的第一个点
          for (i = 0; i < stride; ++i) {
            closestPoint[i] = coordinates[offset + i];
          }
          closestPoint.length = stride;
          return squaredDistance;
        } else {
          return minSquaredDistance;
        }
      }
      const tmpPoint = [NaN, NaN]; // 用于临时存储点到线段的最近的点
      let index = offset + stride;
      while (index < end) {
        assignClosest( // assignClosest方法是获取点到其中一段线段(只有两个坐标构成的线段)
          coordinates, index - stride, index, stride, x, y, tmpPoint); 
        squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]); //得到目标点到任意一个线段的最短距离的平方
        if (squaredDistance < minSquaredDistance) {
          minSquaredDistance = squaredDistance;
          for (i = 0; i < stride; ++i) {
            closestPoint[i] = tmpPoint[i];
          }
          closestPoint.length = stride;
          index += stride;
        } else {
          // 跳过多个点,因为我们知道所有跳过的点都不能比我们找到的最近点更近。我们知道这是因为我们知
          // 道当前点有多近,到目前为止我们找到的最近点有多近,以及连续点之间的最大距离。例如,如果我
          // 们当前的最近点距离是10,那么到目前为止我们发现的最好的距离是3,并且连续点之间的最大距离是2,
          // 那么我们需要跳过至少(10-3)/2==3(向下取整)点,以便有机会找到更近的点。我们使用
          // math.max(…,1)来确保我们总是前进至少一个点,以避免无限循环。.
          index += stride * Math.max(
            ((Math.sqrt(squaredDistance) -
                Math.sqrt(minSquaredDistance)) / maxDelta) | 0, 1);
        }
      }
      if (isRing) {
        // 如果是环的话,则还需要检查最后的闭合的那一段线段
        assignClosest(
          coordinates, end - stride, offset, stride, x, y, tmpPoint);
        squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);
        if (squaredDistance < minSquaredDistance) {
          minSquaredDistance = squaredDistance;
          for (i = 0; i < stride; ++i) {
            closestPoint[i] = tmpPoint[i];
          }
          closestPoint.length = stride;
        }
      }
      return minSquaredDistance;
    }
      /**
       * @desc 计算距离
       * @param {*} p1 起始点
       * @param {*} p2 终结点
       */
      function dist2D (p1, p2) {
        var dx = p1[0] - p2[0]
        var dy = p1[1] - p2[1]
        return Math.sqrt(dx * dx + dy * dy)
      }
    

    2. 上述第一个点是针对,只有一条辅助线满足条件的情况。若存在,多条辅助线满足,绘制焦点到辅助线的距离少于阈值A,则取任意两条辅助的焦点作为最新的绘制焦点。(因为阈值A比较小,可以默认其差别不大)

    关键在于,求取两个线段的交点,关键代码如下:

      /**
       * @description 根据两条线段的端点,得到线段相交的点
       * @param {*} d1 线段1的两个端点坐标
       * @param {*} d2 线段2的两个端点坐标
       */
      function getIntersectionPoint (d1, d2) {
        var d1x = d1[1][0] - d1[0][0]
        var d1y = d1[1][1] - d1[0][1]
        var d2x = d2[1][0] - d2[0][0]
        var d2y = d2[1][1] - d2[0][1]
        var det = d1x * d2y - d1y * d2x
    
        if (det !== 0) {
          var k = (d1x * d1[0][1] - d1x * d2[0][1] - d1y * d1[0][0] + d1y * d2[0][0]) / det
          return [d2[0][0] + k * d2x, d2[0][1] + k * d2y]
        } else return false
      }

    上述的距离,一般指的是屏幕像素坐标的距离。

    最后,焦点不断捕捉的过程是实时的,因此,当鼠标移动过程中需要不断地执行上述的两个步骤。因此,调优是需要下点功夫的。

    生成辅助线的思路

    必须定义当绘制完成图形的某个端点时的回调方法。在回调方法中,其实根据已知的点坐标,计算辅助线的方程,并根据方程进行等距离的点插值。如下步骤:

    1. 根据刚绘制的端点与上一个端点,则得到新的直线方程的斜率(辅助线是90度,45度或者延长线)及其经过的一个点(刚绘制的端点),得到辅助线方程

    2. 得到直线方程后,根据直线的点向式的代数形式,以固定的距离进行插值,得到屏幕上的辅助线。

    /** 新增辅助线
    * @param {Array} v 坐标数组,只有两个断电
    * @return {*} 辅助线对象
    */
    function addGuide (v, ortho) {
      if (v) {
        const guideLength = Math.max(
          this.projExtent_[2] - this.projExtent_[0],
          this.projExtent_[3] - this.projExtent_[1]
        )// 从定义的最大空间范围中获取辅助线的最大长度
    
        const extent = this.projExtent_// 获取最大空间范围
    
        const dx = v[0][0] - v[1][0] 
        const dy = v[0][1] - v[1][1]
        const d = 1 / Math.sqrt(dx * dx + dy * dy)
    
        const generateLine = function (/** 方向 **/loopDir) {
          var p, g = []
          var loopCond = guideLength * loopDir * 2
          for (var i = 0; loopDir > 0 ? i < loopCond : i > loopCond; i += (guideLength * loopDir) / 4) { // 插值100个等距离的点
            if (ortho) p = [v[0][0] + dy * d * i, v[0][1] - dx * d * i]
            else p = [v[0][0] + dx * d * i, v[0][1] + dy * d * i]
            // 判断插值的点是否在最大的extent里
            if (containsCoordinate(extent, p)) g.push(p)
            else break
          }
          return new LineString([g[0], g[g.length - 1]]))
        }
    
        var f0 = generateLine(1)// 正向辅助线
        var f1 = generateLine(-1)// 反向辅助线
    
        return [f0, f1]
      }
    }

    总结

    绘制辅助线是一个实时性比较强的功能,原理是简单的几何拓扑知识。实现起来比较简单,几何的实时拓扑难点在于性能调优,选择合适的策略去实现功能。

    展开全文
  • 打桌球瞄不准,就做了个画线的工具,可直接在屏幕上画线,开启时要关杀毒软件.先做个透明窗口,然后让鼠标穿
  • 要在游戏全屏模式下屏幕绘制弹道曲线,需要用到以下三个API: //获取DC [DllImport("User32.dll")] public extern static System.IntPtr GetDC(System.IntPtr hWnd); //释放DC [Sy

    要在游戏全屏模式下屏幕绘制弹道曲线,需要用到以下三个API:

    1.         //获取DC 
    2.         [DllImport("User32.dll")]
    3.         public extern static System.IntPtr GetDC(System.IntPtr hWnd);
    4.          
    5.         //释放DC 
    6.         [System.Runtime.InteropServices.DllImport("User32.dll")]
    7.         static extern int ReleaseDC(IntPtr hWnd,IntPtr hDC);
    8.         //区域重绘 
    9.         [DllImport("user32.dll",CharSet = CharSet.Auto)]
    10.         public static extern bool InvalidateRect(IntPtr hWnd,IntPtr lpRect,bool bErase);

    通过调用以上三个外部方法,我们在C#里面可以直接在游戏全屏屏幕上绘制我们任何想要的图形:

    1. public void DrawAssistantLine()
    2.         {
    3.             
    4.             Pen Pe = new Pen(Color.Red,1);
    5.             SolidBrush SB = new SolidBrush(Color.Green);
    6.             IntPtr ScreenHandle = GetDC(IntPtr.Zero);
    7.             Graphics G = Graphics.FromHdc(ScreenHandle);
    8.             //绘制角度线条
    9.             G.DrawLine(Pe,74,427,74 + float.Parse((37 * Math.Cos(PushAngle * Math.PI / 180)).ToString()),427 - float.Parse((37 * Math.Sin(PushAngle * Math.PI / 180)).ToString()));
    10.             //绘制角度端点
    11.             G.FillEllipse(SB,72 + float.Parse((37 * Math.Cos(PushAngle * Math.PI / 180)).ToString()),425 - float.Parse((37 * Math.Sin(PushAngle * Math.PI / 180)).ToString()),4,4);
    12.             //绘制风力线
    13.             G.DrawLine(Pe,38 + WindPower,469,38 + WindPower,477);
    14.             //绘制推力线
    15.             G.DrawLine(Pe,224 + PushPower,438,224 + PushPower,454);
    16.             MovementCoordinate = PrimaryCoordinate;
    17.             MoveKeyCoordinates = new List<Point>();
    18.             double MoveTime = 0;
    19.             while(((MovementCoordinate.X > Parabola.GraphRangeXmin) && (MovementCoordinate.X < Parabola.GraphRangeXmax)) && ((MovementCoordinate.Y > Parabola.GraphRangeYmin) && (MovementCoordinate.Y < Parabola.GraphRangeYmax)))
    20.             {
    21.                 MovementCoordinate = new Point();
    22.                 MovementCoordinate.X = int.Parse(Math.Round(PrimaryCoordinate.X + TankNowPlay.PushCoefficient * PushPower * Math.Cos(PushAngle * Math.PI / 180) * MoveTime + (TankNowPlay.WindCoefficient * WindPower * MoveTime * MoveTime) / 2,0).ToString());
    23.                 MovementCoordinate.Y = int.Parse(Math.Round(PrimaryCoordinate.Y - TankNowPlay.PushCoefficient * PushPower * Math.Sin(PushAngle * Math.PI / 180) * MoveTime + (TankNowPlay.GravityCoefficient * MoveTime * MoveTime) / 2,0).ToString());
    24.                 MoveKeyCoordinates.Add(MovementCoordinate);
    25.                 MoveTime += Parabola.GraphFreq;
    26.             }
    27.             Point[] Ps = new Point[MoveKeyCoordinates.Count];
    28.             MoveKeyCoordinates.CopyTo(Ps,0);
    29.             //绘制弹道曲线
    30.             G.DrawLines(Pe,Ps); 
    31.             //绘制角度边框
    32.             G.DrawEllipse(Pe,35,388,74,74);
    33.             //绘制推力边框
    34.             G.DrawRectangle(Pe,224,438,322,16);
    35.             //绘制风力边框
    36.             G.DrawRectangle(Pe,38,469,72,8);
    37.             //绘制地图边框
    38.             G.DrawRectangle(Pe,482,5,153,95);
    39.             Pe.Dispose();
    40.             SB.Dispose();
    41.             G.Dispose();
    42.             ReleaseDC(IntPtr.Zero,ScreenHandle);
    43.             
    44.         }

    上面的示例是调用外部方法进行部分测试用的曲线绘制,程序中的坐标均为疯狂坦克游戏界面相关元素的真实坐标。

     

    最后需要注意的是,由于游戏界面时在不停的刷新的,所以我们绘制的曲线也必须不停(10ms/次)的重绘,才能在屏幕上一直显示。

    展开全文
  • (笔记本写的代码,屏幕小,所以为了能够整屏看到完整代码,就将字体缩小了,如果觉得看不清的,可以另行放大) 一、页面DOM结构 正如你所见,这就是一个vue的模板页面,一个简单的dom,我们的3D...

    假设你已经创建好了three.js的开发环境(我是写在vue项目中的),那么接下来,从头开始演示是如何用three.js来构建3D图形的。(笔记本写的代码,屏幕小,所以为了能够整屏看到完整代码,就将字体缩小了,如果觉得看不清的,可以另行放大)

    一、页面DOM结构

    image.png

    正如你所见,这就是一个vue的模板页面,一个简单的dom,我们的3D图形都是渲染在这个名为container的div中的,接下来,开始吧。

    二、初始化三要素

    场景、相机、渲染器,将绘好的场景渲染到渲染器中,将渲染器通过相机的视角传达给用户;

    image.png

    三、往场景中添加mesh模型以及其他

    你应该看到上面中间有一个函数是添加mesh的,那我们具体来看看这个函数:

    image.png

    在这里,只向场景中添加了辅助线和一个立方体;

    注意这个立方体的添加过程,第一句是声明立方体的形状(怎样的立方体),第二句是立方体的材质(材质决定最终看到的物体样子,可能会因为色差的原因,导致物体不见了)。

    这里我的物体是法向量网孔材料(MeshNormalMaterial)的盒状立方体(BoxGeometry),立方体的位置也会决定我们看到的最终效果。

    四、最终效果

    image.png

    五、camera以及辅助线

    我用的是three.js的r99版本,所以API上的有些代码直接拿来用是会出现错误的。

    image.png

    这里用的是透视相机、除此之外还有立方体相机和正交相机,但是透视相机更符合人类看物体的视角,所以后面也会一直使用透视相机;

    相机的x,y,z这就不用多说了,上面那个150其实和z效果差不多,都是用来决定相机的远近(间接决定所见物体的远近/大小),如有兴趣,可以自己调试各种值,r99版本中,x、y、z调试的时候,一次+1,突然加多了,你就发现物体不见了(TT)

    image.png

    上面的代码是立方体的一些参数,包括形状和材质,x、y、z轴偏移量;

    尤其注意,r99版本中有很多值都是以1为上限,比如立方体的大小(长宽高),1就等于渲染器的大小,0.5表示渲染器大小的一半,物体的3轴偏移量也是以0.1为步长改变,所以老版本可能(是以像素为单位)动辄加减个几百的,到r99版本上,直接就看不到图形了,这点切记。



    转载于:https://www.cnblogs.com/eco-just/p/10068815.html

    展开全文
  • PhotoShop中能灵活的使用辅助工具是相当有帮助的,本文详细介绍几种比较常用的辅助功能,如果你能使用这些功能,你的PS技术会更上一层楼。1.工具/原料Adobe Photoshop CS6软件2.思维导图3.小技巧3.1如何灵活的调整...

    PhotoShop中能灵活的使用辅助工具是相当有帮助的,本文详细介绍几种比较常用的辅助功能,如果你能使用这些功能,你的PS技术会更上一层楼。

    20b15a793e860f761a929b8168d0672e.png

    1.工具/原料

    • Adobe Photoshop CS6软件

    2.思维导图

    52cc50b1c0f5b3ae70271a661ed00eb8.png

    3.小技巧

    3.1如何灵活的调整屏幕模式?

    在菜单栏中选择视图->屏幕模式,这是会出现3种模式,分别是标准屏幕模式,带有菜单栏的全屏模式,全屏模式。具体位置如下图所示:

    2ae279ff2436a3e73427e437a5069acd.png

    注意:

    (1)我们可以利用屏幕模式切换的快捷键F来灵活切换屏幕模式。比如我们切换到全屏模式时,这时就会便于我们观看,而且如果PS快捷键掌握很熟练的话,那我们就可以直接在全屏的模式进行图片操作,全屏模式效果如下图所示:

    95a9356099c452b5cfe8c26c8d8f48f4.png

    (2)我们也可以在PS工具栏上来调整屏幕显示模式,点击如下位置,就可以随意切换屏幕模式,具体位置如下图所示:

    e0673b5a2c8f008d1cdb499191002f54.png

    3.2PS中如何显示额外内容?

    在菜单栏中选择视图->显示额外内容(快捷键Ctrl+H),里面的额外内容是指显示里面的内容,具体内容如下图所示:

    b9092fa2cf61f638d574ee90960334be.png

    注意:我们比较经常用的内容是网格或参考线,比如网格我们就可以把它当做制图参考,制图坐标来使用,从而来提供精确的定位,具体的效果如下图所示:

    4a6f600213bd8a3d86d7ede03886864c.png

    3.3PS中该如何使用标尺呢?

    在菜单栏中选择视图->标尺(快捷键Ctrl+R),点击确认后,具体效果如下图所示:

    01d7d7138d525086e97c03a0d6392c87.png

    注意:

    (1)标尺主要就是用来衡量位置的,我们可以在标尺上面右击来更改想要的单位,目前我这边选择的单位是厘米,通过标尺就可以确认它在什么地方,哪个位置具体,效果如下图所示:

    49ea526fbb6c266bde1c6f5be2ad1a6b.png

    (2)默认左上角是归零点,左上角往右走,数值在变大,同理,往下走数值也在变大。我们也可以自己自定义设置想要的零点,可以点击左上角那个小灰块,点击那个小灰块不松,这时就会变成一个十字光标,然后我们在拖动这个十字光标,拖到哪个位置,这时这个位置就变成归零点了。

    (3)双击左上角就可以恢复原先的归零点。

    (4)标尺是个很有用的小工具,比如有些图片对位置要求很严格的话,那就必须用到标尺了。

    (5)标尺经常会和参考线一起配合使用。灵活使用这两个小工具,会让你图片位置做的更加精准。

    3.4PS中该如何利用参考线呢?

    在菜单栏中选择视图->新建参考线,点击确认后就会弹出新建参考线,效果如下图所示:

    da064b9621f59aa3567a6c1ae224532a.png

    我们可以调整自己想要的取向,有两种分别是水平和垂直,选好垂直的参考线后,位置填10厘米,这时就可以在对应位置生成一个垂直参考线,具体效果如下图所示:

    5116795243ddde39412acc91d8b19053.png

    注意:

    (1)我们也可以先点击标尺,然后往对应的位置拉出自己想要位置的参考线。

    (2)按住alt键在水平的参考线进行单击,就可以变为垂直的参考线了,如果选择垂直的参考线进行单击的话,就变为水平了。

    (3)我们可以选中移动工具(快捷键V),来进行参考线移动。

    (4)如果参考线你不想让它移动的话,那我们就可以在视图菜单上选择锁定参考线(快捷键Ctrl+Alt+;),这样参考线就不会被移动了。

    (5)如果我们是想删除参考线的话,那我们可以将参考线拉回标尺位置,这样就删除了参考线。

    (6)如果不想显示参考线的话,可以用上面提到的隐藏额外内容,快捷键是Ctrl+H。

    3.5PS中该如何对齐图层呢?

    在菜单栏中选择视图->对齐(快捷键Ctrl+Shift+;),具体对齐方式有如下几种:

    a4bd6fa94d69a09e8e119f07ccef7c5a.png

    有了对齐这个操作,我们就可以将图层快速的对齐到参考线上。如果没有这个点对齐这个功能的话,那么要想把多个图层对齐在同一个参考线上就没有那么简单了,所以这个对齐功能对那些精准的操作是相当有帮助的。

    3.6PS中该如何恢复呢?

    在菜单栏中选择文件->恢复(快捷键F12),这时文档就会恢复为为原来的样子了,注意恢复有个优点就是不会丢失之前的历史记录,而如果我们平时用的删除历史记录这个操作的话,就会把之前的记录给删除掉了。

    4.本文涉及的快捷键

    (1)屏幕模式切换:F

    (2)显示额外内容:Ctrl+H

    (3)标尺:Ctrl+R

    (4)锁定参考线:快捷键Ctrl+Alt+;

    (5)移动工具:V

    (6)对齐:Ctrl+Shift+;

    (7)恢复:F12

    喜欢我们的记得点关注哦,欢迎观看图文视频学习之旅的相关学习内容,如果大家有有关ps的小技巧,欢迎留言哈。

    展开全文
  • PhotoShop中能灵活的使用辅助工具是相当有帮助的,本文详细介绍几种比较常用的辅助功能,如果你能使用这些功能,你的PS技术会更上一层楼。1.工具/原料Adobe Photoshop CS6软件2.思维导图3.小技巧3.1如何灵活的调整...
  • 如果在使用 iPhone 的过程中,屏幕忽然变暗,可能有如下原因:开启了“亮度自动调节”功能在 iPhone 中有一项“亮度自动调节”的功能,此功能是根据设备周围的光线条件来调整亮度级别:在光线较暗的地方,传感器会调...
  • 如果在使用 iPhone 的过程中,屏幕忽然变暗,可能有如下原因:开启了“亮度自动调节”功能在 iPhone 中有一项“亮度自动调节”的功能,此功能是根据设备周围的光线条件来调整亮度级别:在光线较暗的地方,传感器会调...
  • ​​如果在使用 iPhone 的过程中,屏幕忽然变暗,可能有如下原因:开启了“亮度自动调节”功能在 iPhone 中有一项“亮度自动调节”的功能,此功能是根据设备周围的光线条件来调整亮度级别:在光线较暗的地方,传感器...
  • 近日有用户发现,iPhone 在更新 iOS 13 之后,...请前往“设置”-“辅助功能”-“显示与文字大小”,下拉到最下方,确认是否打开了“自动亮度调节”功能。如打开了此功能,您可以看到设备上的亮度会根据不同的光线...
  • 本文实例为大家分享了OpenGL绘制...另有辅助输入功能: 1、按键盘‘C’键可清除所有记录点。 2、按键盘‘R’键可清除上一个记录点。 3、按键盘‘Q’键可推出程序。 项目设计思路 1、Bezier曲线介绍: 贝塞尔曲线就
  •  屏幕大小,指屏幕对角线的长度,而不是屏幕的宽度或高度; 单位为英寸  如 iPhone 7 屏幕尺寸为 4.7 英寸;三星 S6 屏幕尺寸为 5.1 英寸;     2、屏幕像素密度 --- ppi  指每英寸屏幕所拥有的像素数;由...
  • 在录制数学微课时,常见的一个问题是需要辅助板书才能讲清楚,但是如果没有手写笔工具,没有专业录制设备的条件下似乎难以在电脑上直接板书。那么这个问题该如何解决呢?网站上找了半天,找了一个很有意思的屏幕书写...
  • OpenGL绘制Bezier曲线

    万次阅读 2015-01-17 18:57:34
     项目要求: – 使用鼠标在屏幕中任意设置控制点,并生成曲线 ...– 使用鼠标和键盘的交互操作实现对曲线的修改。...用户用鼠标左击屏幕任意处产生记录点。...鼠标右击屏幕任意处由先前的任意个数记录点和...另有辅助
  • 计算机辅助几何设计之Bezier曲线(任意次数)程序实现,并可用鼠标左键进行屏幕选点,利用右键选中某一控制点并拖动控制点实时改变Bezier曲线形状。
  • 矢量图使用直线和曲线来描述图形这些图形的元素是一些点线矩形多边形圆和弧线等等它们都是通过数学公式计算获得的在数学上定义为一系列由线连接的点矢量文件中的图形元素称为对象每个对象都是一个自成一体的实体它...
  • Goldie App 是一款Mac上优秀的黄金比例标尺设计辅助工具,可以方便的在屏幕上显示黄金比例标尺,方便设计工作者进行相关设计,此外还包括三分法、对角线三分法和巴洛克式比例等规则的标尺,简单易用,很不错!...
  • Goldie App 是一款Mac上优秀的黄金比例标尺设计辅助工具,可以方便的在屏幕上显示黄金比例标尺,方便设计工作者进行相关设计,此外还包括三分法、对角线三分法和巴洛克式比例等规则的标尺,简单易用,很不错!...
  • 矢 量 插 画 矢量图像也称为面向对象的图像或绘图图像在数学上定义为一系列由线连接的点矢量文件中的图形元素称为对象每个对象都是一个自成一体的实体它具有颜色形状轮廓大小和屏幕位置等属性既然每个对象都是一个...
  • 曹菲包装计算机辅助设计软件应用-CorelDraw-矢量插画的绘制-班级17包装联合一班姓名张悦矢量图像也称为面向对象的图像或绘图图像在数学上定义为一系列由线连接的点矢量文件中的图形元素称为对象每个对象都是一个自成...
  • 矢量图像也称为面向对象的图像或绘图图像在数学上定义为一系列由线连接的点矢量文件中的图形元素称为对象每个对象都是一个自成一体的实体它具有颜色形状轮廓大小和屏幕位置等属性既然每个对象都是一个自成一体的实体...
  • MATLAB基础视频 七 MATLAB绘图功能1二维高层绘图操作 作者lskyp 论坛地址 21世纪电子论坛原创视频 主要内容 二维高层绘图的基本函数 plot函数 二维绘图的辅助操作 标注 图形名称 坐标轴名称 曲线标注 图例 坐标轴...
  • 借助于辅助线,和 app:layout_constrainedHeight表示是否约束height,相应的也有app:layout_constrainedWidth * app:layout_constraintVertical_bias表示作用于链头第一个子控件,通过设置值0~1控
  • 高德地图中实现手绘任意线显示

    千次阅读 2015-06-19 17:19:47
    项目中需要实现能够在地图上通过手绘的方式绘制线图形,已达到辅助显示效果,实现并不复杂,这里面主要用到了一个坐标转换:屏幕坐标转换到地图坐标,记录手指触摸屏幕的点并保存到数组中,并绘制到地图上
  •  经线也称子午线,是人类为度量方便而假设出来的辅助线,定义为地球表面连接南北两极的大圆线上的半圆弧。任两根经线的长度相等,相交于南北两极点。每一根经线都有其相对应的数值,称为经度。经线指示南北方向。
  • 一条垂直)如下图连接了四条线辅助线辅助线的调出:水平辅助线:进入activity.xml的设计模式之后如下图为了尽量满足不同屏幕的适配,在做ui的时候应当多使用辅助线,将辅助线调整到屏幕的百分比模式tips:控件的线可以...
  • Barrier一个辅助类,不会绘制到屏幕上,也不会展现给用户。它通过属性constraint_referenced_ids将一些View包裹在一起形成一个屏障,然后通过属性barrierDirection向左上右下四个方向给某个View提供约束条件,或者...
  • 自打入手iQOO之后,竟然迷恋上“吃鸡”游戏,记得在没有接触iQOO手机之前,用没有压感式(辅助按键)的手机吃鸡,操作直接跟不上,感觉吃鸡这游戏我应该这辈子都不会玩...6寸的手机屏幕,那么多操作按键,显然两个大...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 168
精华内容 67
关键字:

屏幕辅助线