扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
阶段一:无意识,无能力
在成都做网站、成都网站制作、成都外贸网站建设过程中,需要针对客户的行业特点、产品特性、目标受众和市场情况进行定位分析,以确定网站的风格、色彩、版式、交互等方面的设计方向。创新互联还需要根据客户的需求进行功能模块的开发和设计,包括内容管理、前台展示、用户权限管理、数据统计和安全保护等功能。
约翰是一个年轻的网站开发者。他以前是一个法律科的学生,但是他认为他的钱途不在这方面,所以他眼睛一转,做了转行的决定。他曾经帮他的朋友修过计算机,而且很成功,所以他认为这方面应该都很容易。
他很快找的了一些能够让他学习这些工作的地方(当然,都是靠近他家的地方)。六个月后,他开始声称自己是个网站专家了,他的简历上已经列举了不少编程语言、应用程序,以及开发平台。
约翰,实际上,是一个冷酷的“拷贝/粘贴”者。 他以为能够成功的显示一个windows提示框,就表示对Javascript已经掌握了。
PHP? 简单:他成功的安装了Wordpress。 Linux? 他从LiveCD上启动了Ubuntu系统,他能够搭建一个Apache负载均衡集群服务器。 他的意识告诉他,他已经无所不知了。
问题就在于,约翰没有意识到他可以学到更多的东西,所以他就简单的停止学习了。他一直处在一个气泡中,他经常访问的在线论坛和邮件列表里有很多人都非常客气的告诉他,他的问题在于他肤浅的知识,但没有人能捅破他的气泡。 而且更悲哀的是,他在论坛里的能力值比你我加起来都高。约翰是无意识的无能力。
阶段二:有意识的无能力
马克是个数学老师。他在一个小镇的大学里工作,他希望他的大学里能够拥至少是五倍于现有数量的资料库。 他知道在科技领域方面他的大学先对于其他研究机构落后很多,所以他决定自己动手去做这个工作。 他想建立一个在线平台,能在社团里共享他们的课程。
马克是天生的逻辑型的思维。 他知道为了实现这个东西,他需要去做研究,搜集信息。他的搜索从维基百科开始,但最终在大量的浏览阅读后他明白其实世界上已经有不少团队对他的这种问题提供了开源方案。
他从那些工程中选择了一个最能满足他的需求的一个。 他开始着手阅读在它的网站上找到的文档和手册,最后他把源程序下载下来。他的兴奋状态逐步退去,因为他看到了’数据库连接错误’。他试了又试,不至三次的检查他的每一步骤,还是不成功。马克并不恼怒,因为他知道自己在这个领域并不是专家。
他开始转向它邮件列表平台,在里面,他用他所知道的(其实很少)最精确的语言描述了他的问题。他提醒每个人,他并不清楚他所做的这个东西,所以他希望能得到更多的文档去阅读,或人们给他提供这方面的提示。 他不需要等待很久就能得到解决方案,因为他采取了正确的方法。马克是有意识的无能力。
阶段三:有意识的有能力
自从阿德拿起他的第一本HTML书至今已经有两年了。很显然这是一条不归路,对于阿德来说,每天思考的问题都是如何去提高自己喜爱的这个专业。
在他拿起第一本书几个月后他得到了他第一个作为自由工作者的身份开发一个网站的工作,他投入了极大的热情,不管这个工作的薪酬有多低,这个工作有多基础 (甚至是对于他的水平)。
他深信一点:最好的学习的方式就是坚持不懈,屡战屡败,屡败屡战。 他经常去研究如何以最好的方式执行一个功能,因为他知道最好的代码不是第一次就能获得的。 他必须去优化代码,他一遍又一遍的审查。 他一次又一次的修正。
之 后,他又给他自己写了一个大概有30到40行的程序。 几天之后,他忍不住感到失望,因为他在上网时发现了一段更省事的、而且更简洁的程序,代码行只有他的一半。
他渴望知道何时他才能轻松的写出如此高质量的代码。 然而,经过一段思考之后,他开始分析他自己的代码。 他知道必须去重写这些代码,否则睡觉都不会安稳。 他不愿意去拷贝粘贴它们。
阿德正走在成为一个优秀的专家的路上,但他不会给自己加上这个称号,他愿意去等。阿德是有意识的有能力。
阶段四:无意识的有能力
这是编程水平的终极阶段。 它不仅仅是知识积累的结果,更是一系列的逻辑规则在数年里慢慢地刻印到一个人的脑海里的结果。
我们面对这样的一个人时不得不由衷的佩服他对如此复杂的问题能更如此轻松的应对。 这种编程者看起来就像是能够嗅出问题的解决方案,而不是思考出的。
优化的编写,可维护的、安全性的程序,应用各种设计模式,使用正确的开发工具组合,这些会自动的在他的工作中体现出来。 这种人能够轻松的使用多种语言在多种操作系统平台上工作。
stroke-width 外部轮廓的边框的大小
bbsmax
绘制基本图形和线型(StrokeStyle)的设置详解
HackerVirus 2022-10-20 原文
绘制基本图形和线型(StrokeStyle)的设置详解
目前,在博客园上,相对写得比较好的两个关于Direct2D的教程系列,分别是万一的Direct2D系列和zdd的Direct2D系列。有兴趣的网友可以去看看。本系列也是介绍Direct2D的教程,是基于Windows API Code Pack 1.1的Direct2D的教程,如果要调试文中的代码的话,还得参考前文 Direct2D教程I——简介及首个例子 下载导入Windows API Code Pack 1.1的动态库
在前文 Direct2D教程I——简介及首个例子 简单介绍了Direct2D,并给了一个简单的示例。接下来,本文对一些基本的绘图命令做个介绍
绘制基本图形:直线、矩形、圆角矩形、椭圆
和GDI+类似,在RenderTarget对象下有各个绘图命令(GDI+是在Graphics对象下有各个绘图命令),下面是各个基本图形的绘图命令的函数原型
直线:
Public Sub DrawLine(firstPoint As Direct2D1.Point2F, secondPoint As Direct2D1.Point2F, brush As Direct2D1.Brush, skrokeWidth As Single, strokeStyle AsDirect2D1.StrokeStyle)
矩形:
Public Sub DrawRectangle(rect As Direct2D1.RectF, brush As Direct2D1.Brush, strokeWidth As Single)
Public Sub DrawRectangle(rect As Direct2D1.RectF, brush As Direct2D1.Brush, strokeWidth As Single, strokeStyle As Direct2D1.StrokeStyle)
Public Sub FillRectangle(rect As Direct2D1.RectF, brush As Direct2D1.Brush)
圆角矩形:
Public Sub DrawRoundedRectangle(roundedRect As Direct2D1.RoundedRect, brush As Direct2D1.Brush, strokeWidth As Single)
Public Sub DrawRoundedRectangle(roundedRect As Direct2D1.RoundedRect, brush As Direct2D1.Brush, strokeWidth As Single, strokeStyle As Direct2D1.StrokeStyle)
Public Sub FillRoundedRectangle(roundedRect As Direct2D1.RoundedRect, brush As Direct2D1.Brush)
椭圆:
Public Sub DrawEllipse(ellipse As Direct2D1.Ellipse, brush As Direct2D1.Brush, strokeWidth As Single)
Public Sub DrawEllipse(ellipse As Direct2D1.Ellipse, brush As Direct2D1.Brush, strokeWidth As Single, strokeStyle As Direct2D1.StrokeStyle)
Public Sub FillEllipse(ellipse As Direct2D1.Ellipse, brush As Direct2D1.Brush)
从上面的函数原型可以看出,以Draw开头的函数都是绘制函数。以Fill开头的函数都是填充函数。绘制函数的线宽由strokeWidth参数指定,绘制函数的线型由strokeStyle参数指定(默认是实线)。和GDI+不同的是,在Direct2D中,不再区分Brush(画刷)和Pen(画笔)对象,而统一用Brush(画刷)对象,在用Brush(画刷)绘制线的时候再指定线宽和线型参数。
从参数strokeWidth和参数strokeStyle来看,都带有单词stroke。熟悉PS的都知道,stroke指的是描边,在PS中描边的位置分为“外部”、“内部”、“居中”。那么在Direct2D中,这里的描边的位置在哪儿呢?我们用代码实验一下。
说明:为了代码的复用,我们把前文中的_d2DFactory和_renderTarget修饰限定词从Private改为Protected。这样在后面的例子中直接继承前文的类,也可以直接用_d2DFactory和_renderTarget这两个对象。
先给出Point2F、RectF、RoundedRect、Ellipse这四个类的原型定义,参数都简介明了,不再详述
Direct2D1.Point2F(x As Single, y As Single)
Direct2D1.RectF(left As Single, top As Single, right As Single, buttom As Single)
Direct2D1.RoundedRect(rect As Direct2D1.RectF, radiusX As Single, radiusY As Single)
Direct2D1.Ellipse(point As Direct2D1.Point2F, radiusX As Single, radiusY As Single)
下面是实验示例代码
Public Class clsDirect2DSample2
Inherits clsDirect2DSample
Public Shadows Sub Render()
If Not _renderTarget Is Nothing Then
With _renderTarget
.BeginDraw()
Dim F1 As New Direct2D1.RectF(0, 0, 100, 50)
Dim F2 As New Direct2D1.RectF(200, 200, 300, 250)
Dim B As Direct2D1.SolidColorBrush = _renderTarget.CreateSolidColorBrush(New Direct2D1.ColorF(1, 0, 0))
_renderTarget.DrawRectangle(F1, B, 10)
_renderTarget.DrawRectangle(F2, B, 10)
.EndDraw()
End With
End If
End Sub
End Class
从上图的代码来看,在(0,0)位置上画了一个100*50的矩形,描边宽度10px。在(200,200)位置上画了一个矩形,描边宽度10px,如下图所示
从上面的效果可以看出两点:
一是左上角的矩形说明,Direct2D中的描边类型应该是“居中”;
二是右边的矩形说明Direct2D中的RectF定义和原本GDI+中的RectangleF定义不同,Direct2D中的RectF中后两个参数是右下角的坐标,而GDI+中的RectangleF中的后两个参数指的是矩形的宽和高。
线型(StrokeStyle)的设置
在上面的函数原型中,线型是由参数strokeStyle决定的,它是StrokeStyle类。这个类不能直接初始化,必须由D2DFactory对象的CreateStrokeStyle函数创建(Direct2D中有不少的类不能直接初始化,必须由D2DFactory或RenderTarget对象的相应的函数创建,如上面的SolidColorBrush对象就必须由RenderTarget对象的CreateSolidColorBrush函数创建)。
先看看CreateStrokeStyle函数的原型定义:
Public Function CreateStrokeStyle(strokeStyleProperties As Direct2D1.StrokeStyleProperties) As Direct2D1.StrokeStyle
Public Function CreateStrokeStyle(strokeStyleProperties As Direct2D1.StrokeStyleProperties, dashes() As Single) As Direct2D1.StrokeStyle
主要是通过strokeStyleProperties参数来设置线型,来看看StrokeStyleProperties结构及其参数对象的原型定义。
Direct2D1.StrokeStyleProperties(startCap As Direct2D1.CapStyle, endCap As Direct2D1.CapStyle, dashCap As Direct2D1.CapStyle, _
lineJoin As Direct2D1.LineJoin, miterLimit As Single, _
dashStyle As Direct2D1.DashStyle, dashOffset As Single)
Public Enum CapStyle
Flat = 0
Square = 1
Round = 2
Triangle = 3
End Enum
Public Enum LineJoin
Miter = 0
Bevel = 1
Round = 2
MiterOrBevel = 3
End Enum
Public Enum DashStyle
Solid = 0
Dash = 1
Dot = 2
DashDot = 3
DashDotDot = 4
Custom = 5
End Enum
其中CapStyle枚举指的是线端的线头类型,分别是Flat(平整,即无)、Square(方块)、Round(圆)、Triangle(三角)。和GDI+中的DashCap枚举类似,多了一个Square(方块),而在下面的例子中会说明Flat和Square的区别。参数startCap决定线起点的线头类型、endCap决定线终点的线头类型、dashCap决定中间划线端的线头类型。
而DashStyle枚举指的是线型,分别是Solid(实线)、Dash(划线)、Dot(点线)、DashDot(点划线)、DashDotDot(点点划线)、Custom(自定义)。和GDI+中的DashStyle一样。
参数dashOffset指的是点划线的偏移量
下面的代码是对上面的两个枚举的演示,请注意枚举CapStyle中的Flat和Square的区别。
Public Class clsDirect2DSample3
Inherits clsDirect2DSample
Public Shadows Sub Render()
If Not _renderTarget Is Nothing Then
With _renderTarget
.BeginDraw()
Dim B As Direct2D1.SolidColorBrush = _renderTarget.CreateSolidColorBrush(New Direct2D1.ColorF(1, 0, 0))
Dim SP As New Direct2D1.StrokeStyleProperties()
Dim S As Direct2D1.StrokeStyle
SP.StartCap = Direct2D1.CapStyle.Flat
SP.EndCap = Direct2D1.CapStyle.Flat
S = _d2DFactory.CreateStrokeStyle(SP)
_renderTarget.DrawLine(New Direct2D1.Point2F(10, 20), New Direct2D1.Point2F(200, 20), B, 8, S)
SP.StartCap = Direct2D1.CapStyle.Square
SP.EndCap = Direct2D1.CapStyle.Square
S = _d2DFactory.CreateStrokeStyle(SP)
_renderTarget.DrawLine(New Direct2D1.Point2F(10, 40), New Direct2D1.Point2F(200, 40), B, 8, S)
SP.StartCap = Direct2D1.CapStyle.Round
SP.EndCap = Direct2D1.CapStyle.Round
S = _d2DFactory.CreateStrokeStyle(SP)
_renderTarget.DrawLine(New Direct2D1.Point2F(10, 60), New Direct2D1.Point2F(200, 60), B, 8, S)
SP.StartCap = Direct2D1.CapStyle.Triangle
SP.EndCap = Direct2D1.CapStyle.Triangle
S = _d2DFactory.CreateStrokeStyle(SP)
_renderTarget.DrawLine(New Direct2D1.Point2F(10, 80), New Direct2D1.Point2F(200, 80), B, 8, S)
SP.StartCap = Direct2D1.CapStyle.Flat
SP.EndCap = Direct2D1.CapStyle.Flat
SP.DashCap = Direct2D1.CapStyle.Round
SP.DashStyle = Direct2D1.DashStyle.Solid
S = _d2DFactory.CreateStrokeStyle(SP)
_renderTarget.DrawLine(New Direct2D1.Point2F(10, 120), New Direct2D1.Point2F(200, 120), B, 6, S)
SP.DashStyle = Direct2D1.DashStyle.Dash
S = _d2DFactory.CreateStrokeStyle(SP)
_renderTarget.DrawLine(New Direct2D1.Point2F(10, 140), New Direct2D1.Point2F(200, 140), B, 6, S)
SP.DashStyle = Direct2D1.DashStyle.Dot
S = _d2DFactory.CreateStrokeStyle(SP)
_renderTarget.DrawLine(New Direct2D1.Point2F(10, 160), New Direct2D1.Point2F(200, 160), B, 6, S)
SP.DashStyle = Direct2D1.DashStyle.DashDot
S = _d2DFactory.CreateStrokeStyle(SP)
_renderTarget.DrawLine(New Direct2D1.Point2F(10, 180), New Direct2D1.Point2F(200, 180), B, 6, S)
SP.DashStyle = Direct2D1.DashStyle.DashDotDot
S = _d2DFactory.CreateStrokeStyle(SP)
_renderTarget.DrawLine(New Direct2D1.Point2F(10, 200), New Direct2D1.Point2F(200, 200), B, 6, S)
.EndDraw()
End With
End If
End Sub
End Class
上面四条线是演示枚举CapStyle的四种类型,注意第一条线是Flat,第二条线是Square。虽然都是方形,但是很明显第二条线比第一条线两边还多出一点(方形线帽)
下面五条线是演示枚举DashStyle表示的五个线型。注意:上面代码中红色的部分,DashCap不能设置为Direct2D1.CapStyle.Flat,如果设置为Flat,则所有的点都不见了;设置其他三种类型分别代表不同的点(方形点、圆点、菱形点)。
再说说枚举DashStyle中的Custom线型。设定为Custom后,必须用一个数组来指定自定义划线的线型。数组按照{实、空、实、空……}顺序来指定各部分的长度,单位是线宽。
例如{2,2}表示2线宽长的实线和2线宽长的空白组成的划线,也就是枚举DashStyle中的Dash
{0,2}表示0线宽长的实线和2线宽长的空白组成的划线,就是枚举DashStyle中的Dot。这也解释了DashCap设置为Direct2D1.CapStyle.Flat时,为何点不见了(设置为其他值时,点实际上是由线头组成的,点本身的长度为0)。
以此类推,{2,2,0,2}表示DashStyle中的DashDot,{2,2,0,2,0,2}表示DashStyle中的DashDotDot
要注意的是,只有枚举DashStyle设置为Custom时,才能传递数组,否则会直接报错的。
最后说说LineJoin枚举,指的是连接两条线的连接方式。分别是Miter(折角)、Bevel(倒角)、Round(圆角)、MiterOrBevel(折角或倒角)。和GDI+中的LineJoin枚举类似,只是MiterOrBevel好像对应GDI+中LineJoin枚举中的MiterClipped。
说说MiterOrBevel,当折角的值没有超过指定的值(系统指定)时,是Miter(折角),反之超过的话是Bevel(倒角)。
参数miterLimit是指折角的限制,低于限制时会自动添加倒角。参数miterLimit最小是1。注意的是miterLimit参数并不是配合LineJoin使用。当miterLimit设置为1的时候,下面的例子中,LineJoin枚举设置成Miter、Bevel、MiterOrBevel效果是一样的。当miterLimit设置为3的时候,LineJoin枚举设置成Miter、Bevel、MiterOrBevel效果才是不一样的
下面是LineJoin的示例,由于是演示两条线的连接,故用了一些后面才会详述的代码。不过,不影响我们理解枚举LineJoin的各个设置值的意义。
左上是Miter,右上是Bevel,左下是Round,右下是MiterOrBevel
Public Class clsDirect2DSample4
Inherits clsDirect2DSample
Public Shadows Sub Render()
If Not _renderTarget Is Nothing Then
With _renderTarget
.BeginDraw()
Dim B As Direct2D1.SolidColorBrush = _renderTarget.CreateSolidColorBrush(New Direct2D1.ColorF(1, 0, 0))
Dim SP As New Direct2D1.StrokeStyleProperties()
Dim S As Direct2D1.StrokeStyle
Dim PG As Direct2D1.PathGeometry
Dim sink As Direct2D1.GeometrySink
PG = _d2DFactory.CreatePathGeometry
sink = PG.Open
sink.BeginFigure(New Direct2D1.Point2F(17, 17), Direct2D1.FigureBegin.Hollow)
sink.AddLine(New Direct2D1.Point2F(45, 85))
sink.AddLine(New Direct2D1.Point2F(85, 45))
sink.AddLine(New Direct2D1.Point2F(85, 125))
sink.AddLine(New Direct2D1.Point2F(165, 17))
sink.EndFigure(Direct2D1.FigureEnd.Open)
sink.Close()
SP.LineJoin = Direct2D1.LineJoin.Miter
SP.MiterLimit = 3
S = _d2DFactory.CreateStrokeStyle(SP)
.DrawGeometry(PG, B, 10, S)
PG = _d2DFactory.CreatePathGeometry
sink = PG.Open
sink.BeginFigure(New Direct2D1.Point2F(217, 17), Direct2D1.FigureBegin.Hollow)
sink.AddLine(New Direct2D1.Point2F(245, 85))
sink.AddLine(New Direct2D1.Point2F(285, 45))
sink.AddLine(New Direct2D1.Point2F(285, 125))
sink.AddLine(New Direct2D1.Point2F(365, 17))
sink.EndFigure(Direct2D1.FigureEnd.Open)
sink.Close()
SP.LineJoin = Direct2D1.LineJoin.Bevel
SP.MiterLimit = 3
S = _d2DFactory.CreateStrokeStyle(SP)
.DrawGeometry(PG, B, 10, S)
PG = _d2DFactory.CreatePathGeometry
sink = PG.Open
sink.BeginFigure(New Direct2D1.Point2F(17, 217), Direct2D1.FigureBegin.Hollow)
sink.AddLine(New Direct2D1.Point2F(45, 285))
sink.AddLine(New Direct2D1.Point2F(85, 245))
sink.AddLine(New Direct2D1.Point2F(85, 325))
sink.AddLine(New Direct2D1.Point2F(165, 217))
sink.EndFigure(Direct2D1.FigureEnd.Open)
sink.Close()
SP.LineJoin = Direct2D1.LineJoin.Round
SP.MiterLimit = 3
S = _d2DFactory.CreateStrokeStyle(SP)
.DrawGeometry(PG, B, 10, S)
PG = _d2DFactory.CreatePathGeometry
sink = PG.Open
sink.BeginFigure(New Direct2D1.Point2F(217, 217), Direct2D1.FigureBegin.Hollow)
sink.AddLine(New Direct2D1.Point2F(245, 285))
sink.AddLine(New Direct2D1.Point2F(285, 245))
sink.AddLine(New Direct2D1.Point2F(285, 325))
sink.AddLine(New Direct2D1.Point2F(365, 217))
sink.EndFigure(Direct2D1.FigureEnd.Open)
sink.Close()
SP.LineJoin = Direct2D1.LineJoin.MiterOrBevel
SP.MiterLimit = 3
S = _d2DFactory.CreateStrokeStyle(SP)
.DrawGeometry(PG, B, 10, S)
.EndDraw()
End With
End If
End Sub
End Class
下面是效果图
从上图能看出四种类型的不同。左上是Miter,右上是Bevel,左下是Round,右下是MiterOrBevel
绘制基本图形和线型(StrokeStyle)的设置详解的更多相关文章
Jupyter自定义设置详解
今天专门花时间总结梳理一下jupyter的一些高级设置,jupyter我已经介绍过一次基本内容了,Setup and Linux | James Chen's Blogs,尤其是如何在服务器运行jup ...
【转】Eclipse Java注释模板设置详解
Eclipse Java注释模板设置详解 设置注释模板的入口: Window-Preference-Java-Code Style-Code Template 然后 ...
Win7 NFS 设置详解 | X-Space
Win7 NFS 设置详解 | X-Space Win7 NFS 设置详解
[转]JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解
[转] JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 - dreamman的日志 - 网易博客 ...
fiddler软件测试——Fiddler抓取https设置详解(图文)(摘抄)
随笔- 8 文章- 0 评论- 0 fiddler软件测试——Fiddler抓取https设置详解(图文) 强烈推荐(原创亲测)!!!Fiddler抓取https设置详解(图文)转 本文主要说 ...
fiddler软件测试——Fiddler抓取https设置详解(图文)
强烈推荐(原创亲测)!!!Fiddler抓取https设置详解(图文)转 本文主要说明了自己在设置fiddler抓取https过程中所遇到的问题及解决步骤,特别是fiddler在设置证书的环节遇到的各 ...
MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解
MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1.什么是Mycat Mycat背后是 ...
【转载】 Eclipse注释模板设置详解
Eclipse注释模板设置详解 网站推荐: 金丝燕网(主要内容是 Java 相关) 木秀林网(主要内容是消息队列)
loadrunner 运行脚本-Run-time Settings-Browser Enmulation设置详解
运行脚本-Run-time Settings-Browser Enmulation设置详解 by:授客 QQ:1033553122 浏览器模拟 所有Internet Vuser Header包含一个标 ...
随机推荐
c# WebBrowser开发参考资料
原文:c# WebBrowser开发参考资料 c# WebBrowser开发参考资料,所有资料的采集均来自网上 话说有了WebBrowser类,终于不用自己手动封装SHDocVw的AxWebBrows ...
设计模式组合模式(Composite)精华
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助如何创建一个系统独立.这是一个这些对象和陈述的组合. 创建使用继承类的类架构更改实例.的对象类型模型的建 ...
sdut 3-4 长方形的周长和面积计算
3-4 长方形的周长和面积计算 Time Limit: 1000MS Memory limit: 65536K 标题叙述性说明 通过本题的练习能够掌握拷贝构造函数的定义和用法: 设计一个长方形类Rec ...
poj 3273 Monthly Expense (二分)
//最大值最小 //天数的a[i]值是固定的 不能改变顺序 # include algorithm # include string.h # include s ...
JSLint是一个JavaScript的代码质量工具
JSLint是一个JavaScript的代码质量工具 可能都或多或少的知道JSLint是一个JavaScript的代码质量工具,一个JavaScript语法检查器和校验器,它能分析JavaScript ...
3. SQL Server数据库状态监控 - 可用空间
原文:3. SQL Server数据库状态监控 - 可用空间 数据库用来存放数据,那么肯定需要存储空间,所以对磁盘空间的监视自然就很有必要了. 一. 磁盘可用空间 1. 操作系统命令或脚本.接口或工具 ...
Warning: Cannot modify header information - headers already sent by (output started at
一般来说在header函数前不能输出html内容,类似的还有setcookie() 和 session 函数,这些函数需要在输出流中增加消息头部信息.如果在header()执行之前有echo等语句,当 ...
JS复选框选中
Web前端之复选框选中属性 熟悉web前端开发的人都知道,判断复选框是否选中是经常做的事情,判断的方法很多,但是开发过程中常常忽略了这些方法的兼容性,而是实现效果就好了.博主之前用户不少方法,经常 ...
leetcode[158] Read N Characters Given Read4 II - Call multiple times
想了好一会才看懂题目意思,应该是: 这里指的可以调用更多次,是指对一个文件多次操作,也就是对于一个case进行多次的readn操作.上一题是只进行一次reandn,所以每次返回的是文件的长度或者是n, ...
shell脚本中执行另一个shell脚本
分类: 可以在一个shell脚本中执行另一个shell脚本(或非可执行文件,主要用于取得一些变量的值),方法是: . 文件名(包括路径) 或 变量=文件名(包括路径) . $变量 注意,圆点后面有 ...
热门专题
微服务INSTALL服务端一直报错CENTOS 7 安装截图软件SHUTTERDB与LOG对数关系雅虎YUI的RESETECHARTS地图 关闭涟漪效果THIS方法用数组颜色ARDUINO报错373WINFORM的冒泡双数组TRIE树 AC自动机FLUENT中怎么看传热系数C# LIST 获取前1000条JS PUSH 参数REACT 字段超长缩放显示,鼠标悬浮气泡显示JAVA PDF加水印 斜着一层层 铺满CHROME ERR_UNSAFE_PORT 所有端口VUE CESIUM 绘制立方体如何利用VAR来调资产类别的权重LINUX运行MAPREDUCE的JAR时报错ADB抓取LOG命令LINUX9 安装 VLC
Home
Powered By WordPress
人名就不翻了,我不懂法语,其他应该不成问题。
作者:Ethel Baraona Pohl
文件出处:建筑技术与材料,选择,可持续性,法国,巴黎,RSie(n)工作室
建筑师:RSie(n)
地点:巴黎,法国
创作团队:François Roche, Stéphanie Lavaux, Jean Navarro
溶液培养系统:RSie(n)
关键尺寸:130平方米
完工时间:2008
图片出处:RSie(n)
玻璃烧瓶制作:Pedro Veloso,包括来自他过去的学生Vanessa Mitrani的参考意见
绿色样本的结构研发与建造:Christian Hubert De Lisle Cie
设定:
1)一座作为猎鸭小屋的私人实验室的设计
2)120株用溶液培养的]蕨类植物
3)300个玻璃烧杯“吹风”部件
用途:细菌培养
通过折射提供更多光线
作为在封闭的庭院与附近对面景色流通的“后窗”
4)收集雨水用来灌溉植物,操作由单独的机械滴灌系统实现,并且键入营 养添加物以控制比例
5)恶魔之石突出体(“第三类接触封闭”),来自于泥盆纪(恐龙时代)的品种(蕨类),由高科技培养以实现在现实法国时期的回归
根据维基网,液体栽培法Hydroponics(源自希腊语hydro水和ponos劳工)是一种不用土壤而用含有矿物养分的液体培养作物的方法。陆地上的植物只有当它们的根在营养液中或者在某种惰性介质中,如珍珠岩,砂砾或渣绒的时候才能生长。
所有的玻璃收集器均有一种叫玻璃吹塑的精巧技术来完成。这是一种借有吹风管(blowpipe和blow tube只是两种不同的称谓,没有重复翻译)使融化了的玻璃变成一个气泡,或者雏型的玻璃塑型技术。原材料在华氏2400度(摄氏1315度)的时候变成玻璃,玻璃所发出的热量足够让它看起来处于白炽状态。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流