• 关于 绘制直线图形 的搜索结果

问题

web页面画图 并保存到服务器端 时间紧 求现有的库

a123456678 2019-12-01 20:21:09 1025 浏览量 回答数 1

回答

opengl es画图形都是通过三角形来画的,当然还可以画直线和点 画图形的时候有两种方法:glDrawArrays( ) 和glDrawElements( )比如画一个由2个三角形组成的正方形,左上角坐标是l,t,右下角坐标是r,b 使用glDrawArrays绘制时,画2个三角形,需要这样传: (l,t),(r,t),(l,b) (r,t),(r,b),(l,b) 也就是说传的顶点数据就是按照顺时针或者逆时针排好顺序的,两个三角形的6个顶点而用glDrawElements画的话可以这样 float coord4={{l,t},{r,t},{r,b},{l,b}}; 绘制时用索引指定顶点顺序: 0,1,3 1,2,3也就是说glDrawArrays传输或指定的数据是最终的真实数据,在绘制时效能更好 而glDrawElements指定的是真实数据的调用索引,在内存/显存占用上更节省

爵霸 2019-12-02 02:46:13 0 浏览量 回答数 0

问题

Android 的Paint(画笔)及Canvas(画布)? 400 报错

爱吃鱼的程序员 2020-05-29 20:04:37 0 浏览量 回答数 1

问题

Android 的Paint(画笔)及Canvas(画布)? 400 报错

优选2 2020-06-05 16:56:03 0 浏览量 回答数 1

问题

移植到 Direct3D 11:报错 

kun坤 2020-06-04 21:07:16 6 浏览量 回答数 1

回答

现在绘制3条Koch曲线就构成了Koch雪花。 kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle -= pi*2/3; kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle -= pi*2/3; kochCurve(x0, y0, angle, length, n); 下一次的迭代同样要用到这样的方法,所以我们可以把这些代码放倒kochCurve函数中。于是kochCurve成了一个递归函数。 为了控制递归的深度,我们需要给kochCurve添加一个参数n。 void kochCurve(double x0, double y0, double angle, double length, int n) { if(n == 0) { double x1 = x0 + length*cos(angle); double y1 = y0 + length*sin(angle); glBegin(GL_LINES); glVertex2d(x0, y0); glVertex2d(x1, y1); glEnd(); } else { length /= 3; n --; kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle += pi/3; kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle -= pi*2/3; kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle += pi/3; kochCurve(x0, y0, angle, length, n); } } n是函数递归的层数,也是Koch曲线迭代的次数。 kochCurve(x0, y0, angle, length, 0)画出的是初始的图形 kochCurve(x0, y0, angle, length, 1)画出第一次迭代 下面是n = 2, 3, 4, 5的结果。 这里用线段的起点(x0, y0),方向(和正向x轴之间的角度)及长度来描述一条线段。 绘制一条从(-1.0, 0.0)到(1.0, 0.0)的Koch曲线用下面的方法: double length = 2.0; double angle = 0.0; double x0 = -1.0; double y0 = 0.0; kochCurve(x0, y0, angle, length); 一条Koch曲线是由4条比例缩写为整体1/3的Koch曲线组成。 length = 2.0/3; kochCurve(x0, y0, angle, length); x0 += length*cos(angle); y0 += length*sin(angle); angle += pi/3; kochCurve(x0, y0, angle, length); x0 += length*cos(angle); y0 += length*sin(angle); angle -= pi*2/3; kochCurve(x0, y0, angle, length); x0 += length*cos(angle); y0 += length*sin(angle); angle += pi/3; kochCurve(x0, y0, angle, length); 这样就画出了第一次迭代的结果。 理论上说,Koch曲线是由无数无限短的线段组成。绘图的时候当然不可能画出无限短的线段。所以我们根据要求,用若干线段组成。 首先,绘制构造Koch曲线的初始图形,也就是一条直线。 void kochCurve(double x0, double y0, double angle, double length) { double x1 = x0 + length*cos(angle); double y1 = y0 + length*sin(angle); glBegin(GL_LINES); glVertex2d(x0, y0); glVertex2d(x1, y1); glEnd(); }

知与谁同 2019-12-02 01:25:16 0 浏览量 回答数 0

回答

现在绘制3条Koch曲线就构成了Koch雪花。 kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle -= pi*2/3; kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle -= pi*2/3; kochCurve(x0, y0, angle, length, n); 下一次的迭代同样要用到这样的方法,所以我们可以把这些代码放倒kochCurve函数中。于是kochCurve成了一个递归函数。 为了控制递归的深度,我们需要给kochCurve添加一个参数n。 void kochCurve(double x0, double y0, double angle, double length, int n) { if(n == 0) { double x1 = x0 + length*cos(angle); double y1 = y0 + length*sin(angle); glBegin(GL_LINES); glVertex2d(x0, y0); glVertex2d(x1, y1); glEnd(); } else { length /= 3; n --; kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle += pi/3; kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle -= pi*2/3; kochCurve(x0, y0, angle, length, n); x0 += length*cos(angle); y0 += length*sin(angle); angle += pi/3; kochCurve(x0, y0, angle, length, n); } } n是函数递归的层数,也是Koch曲线迭代的次数。 kochCurve(x0, y0, angle, length, 0)画出的是初始的图形 kochCurve(x0, y0, angle, length, 1)画出第一次迭代 下面是n = 2, 3, 4, 5的结果。 这里用线段的起点(x0, y0),方向(和正向x轴之间的角度)及长度来描述一条线段。 绘制一条从(-1.0, 0.0)到(1.0, 0.0)的Koch曲线用下面的方法: double length = 2.0; double angle = 0.0; double x0 = -1.0; double y0 = 0.0; kochCurve(x0, y0, angle, length); 一条Koch曲线是由4条比例缩写为整体1/3的Koch曲线组成。 length = 2.0/3; kochCurve(x0, y0, angle, length); x0 += length*cos(angle); y0 += length*sin(angle); angle += pi/3; kochCurve(x0, y0, angle, length); x0 += length*cos(angle); y0 += length*sin(angle); angle -= pi*2/3; kochCurve(x0, y0, angle, length); x0 += length*cos(angle); y0 += length*sin(angle); angle += pi/3; kochCurve(x0, y0, angle, length); 这样就画出了第一次迭代的结果。 理论上说,Koch曲线是由无数无限短的线段组成。绘图的时候当然不可能画出无限短的线段。所以我们根据要求,用若干线段组成。 首先,绘制构造Koch曲线的初始图形,也就是一条直线。 void kochCurve(double x0, double y0, double angle, double length) { double x1 = x0 + length*cos(angle); double y1 = y0 + length*sin(angle); glBegin(GL_LINES); glVertex2d(x0, y0); glVertex2d(x1, y1); glEnd(); }

玄学酱 2019-12-02 01:25:20 0 浏览量 回答数 0

回答

简介编辑Python科学计算Python科学计算VPython是一套简单易用的三维图形库,使用它可以快速创建三维场景和动画。和TVTK相比,它更适合于创建交互式的三维场景,而TVTK则更适合于对数据进行三维可视化。本章将通过几个实例介绍如何使用VPython制作实时、交互式的三维动画演示程序。 [1] 制作动画演示编辑用VPython制作动画的简单之处在于:只要在一个循环体中不断地修改场景中的各个模型以及照相机的各种属性,即可实现动画效果。与场景交互编辑为了和场景中的物体进行交互,VPython提供了如下方便实用的功能:键盘和鼠标事件的处理。控件窗口和4种控件(按钮、滚动条、开关及菜单),用于制作简单的用户界面。绘图窗口,用于绘制二维坐标图。由于篇幅受限,本书只介绍键盘和鼠标事件的处理,请读者参考VPython的文档和演示程序来自学其他部分的内容。响应键盘事件通过场景窗口对象的kb属性可以获得按键信息。kb.keys是窗口中等待处理的键盘事件的个数,调用kb.getkey()可以从键盘事件队列中获取一个待处理的事件。如果队列为空,getkey()将一直等待,直到产生键盘事件为止。getkey()的返回值是一个描述按键的字符串。下面是一个简单的键盘事件测试程序,可以用它查看各个按键的名称。响应鼠标事件鼠标射线和鼠标各个坐标属性之间的关系鼠标射线和鼠标各个坐标属性之间的关系鼠标事件和键盘事件类似,通过场景窗口对象的mouse属性进行鼠标事件的处理。鼠标的坐标是二维视图平面上的一个点,在三维空间中有一条直线上的点都将投影到这个位置,我们称此直线为鼠标射线。scene.mouse是一个mouse_object对象,下面列出它的属性和方法。为了便于理解,右图显示了鼠标射线和pos、pickpos等属性之间的关系。pos:鼠标在三维空间中的坐标,此坐标是鼠标射线与经过点scene.center且平行于屏幕的平面的交点。button:描述鼠标按键的字符串,值可以为None、'left'、'right'、'wheel'。此属性只有在产生事件时才不为None。pick:用鼠标选中的物体对象,与鼠标射线相交的第一个物体。pickpos:鼠标射线与pick物体的表面的交点坐标。camera:当前照相机的位置坐标,旋转或缩放场景时会发生变化。ray:从camera到pos的单位方向矢量,也就是鼠标射线的方向,它正好和窗口视图垂直。鼠标射线在三维空间中的参数方程为camera+t*ray,其中t是一个大于0的任意参数。alt、ctrl、shift:Alt、Ctrl、Shift三个按键的状态。project():计算鼠标射线与任意平面的交点,平面由表示法线方向的normal参数和表示平面上某点坐标的point参数指定。因为与屏幕平行的面的法线方向为scene. forward,所以下面语句的计算结果与scene.mouse.pos相同:scene.mouse.project(normal=scene.forward, point=scene.center)events:待处理的鼠标事件的数目。getevent():从鼠标事件队列中获取最早的鼠标事件。如果队列为空就一直等待事件的发生。getevent()返回的事件对象保存事件发生时的鼠标坐标,也具有上述的属性和方法。除此之外,事件对象还有press、click、drag、drop、release等属性,它们是描述鼠标按键的字符串,分别是产生“按下”、“单击”、“拖”、“放”、“松开”5种鼠标事件的按钮名称。用界面控制场景编辑用TraitsUI的界面控制Visual场景用TraitsUI的界面控制Visual场景VPython提供了一种控制窗口,可以放置按钮、开关及滚动条等简单控件,用以实时设置场景中的物体。但是这些控件不但功能有限,而且不是标准的界面控件,操作起来不是很方便。本节介绍如何使用TraitsUI制作一个能控制VPython场景的界面。VPython和TraitsUI各有自己的独立窗口,TraitsUI界面有自己的消息循环,而Visual窗口有自己的动画控制和消息处理循环。因此我们需要使用多线程或多进程方式,让这两个循环互不影响。下面是使用多线程实现TraitsUI控制场景的完整程序。创建复杂模型编辑VPython只提供了一些简单的立体几何形状,如果要创建复杂的物体,就需要用户自己编写程序,计算物体的多边形网格模型数据,并使用faces()将数据转换为模型进行显示。任何一个三维模型都可以用许多三角形的面来表示,对于每个三角形的每个顶点,我们需要计算如下数据:顶点的坐标:三个浮点数表示的三维坐标。顶点的法线方向:三个浮点数表示的三维方向矢量。顶点的颜色:三个浮点数表示的红、绿、蓝颜色分量。将保存上述数据的三个数组传递给faces()即可创建三维模型。对于一个有N个三角形的模型,每个数组的长度都是33N,也可以传递一个形状为(3*N,3)的二维数组。

xuning715 2019-12-02 01:10:23 0 浏览量 回答数 0

问题

【精品问答】python技术1000问(1)

问问小秘 2019-12-01 21:57:48 445437 浏览量 回答数 8
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 SSL证书 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 2020中国云原生 阿里云云栖号