Y分形的平面微带天线生成过程

本文介绍了使用Altium Designer脚本程序生成Y型天线的过程,在窗体中线宽、迭代次数,边框长度可以直接设置。

Y分形天线用户界面由一个窗体、1个TImage控件、3个TLable控件、3个TEdit控件、一个TButton控件构成,

窗体步骤如下:

  1. 新建一个VB Script Form文件,保存脚本文件,将文件命名为Y分形天线设计。
  2. 将窗体的Caption属性改为“Y分形天线设计”。
  3. 在窗体中添加1个TImage控件、3个TLable控件、3个TEdit控件、一个TButton控件。
  4. 在TImage控件中加入图片,将3个TLable控件的Caption分别改为“边长(mm):”、“线宽(mm):”、“迭代次数:”。将3个TEdit控件的Text属性分别改为“100”、“2”、“4”,将TButton控件的Caption属性改为“生成”。

窗体如下图所示

图元分析:

Y分形天线的基本结构如下所示。基本的图元由主干M、左分支L、右分支R构成,再一次迭代以左分支的终点和右分支的终点上增加一个基本Y型图元。

Y分形天线的基本图元为Y型,上下左右四个方向都向前生长Y型的分支,向上Y型每次迭代主干M都是垂直向上,左、下、右Y型分支和上Y型分支相同,可由上Y型生成之后将坐标依次变换一下,得到左、下、右Y型分支,生成的图像如下图所示,源码附后。

源程序:

PI = 3.1415926

Sub Start_PCBServer()
Call Client.StartServer("PCB")
PcbFileName = "PCB1.PcbDoc"
Set Document = Client.OpenDocument("PCB", PcbFileName)

If Not (Document Is Nothing) Then
'Add this schematic sheet in the newly created PCB project in DXP.
Set Workspace = GetWorkspace
If Not (Workspace Is Nothing) Then
Workspace.DM_FocusedProject.DM_AddSourceDocument(Document.FileName)
End If
Client.ShowDocument(Document)
End If
End Sub

'Draw Line Function
Sub Paint_Line(x1,y1,x2,y2)
Dim Board
Dim Track
Set Board = PCBServer.GetCurrentPCBBoard
Track = PCBServer.PCBObjectFactory(eTrackObject,eNoDimension,eCreate_Default)
Track.X1 = MMsToCoord(CLng(x1)+Board.GetState_XOrigin/10000*0.0254)
Track.Y1 = MMsToCoord(CLng(y1)+Board.GetState_XOrigin/10000*0.0254)
Track.X2 = MMsToCoord(CLng(x2)+Board.GetState_XOrigin/10000*0.0254)
Track.Y2 = MMsToCoord(CLng(y2)+Board.GetState_XOrigin/10000*0.0254)
Track.Layer = eTopLayer
Track.Width = MMsToCoord(Round(Edit2.Text))
Board.AddPCBObject(Track)
Board.LayerIsDisplayed(ALayer) = True
End Sub

'Draw rectangle Function
Sub Paint_Rectangle(x1,y1,x2,y2)
call Paint_Line(x1,y1,x2,y1)
call Paint_Line(x1,y1,x1,y2)
call Paint_Line(x1,y2,x2,y2)
call Paint_Line(x2,y1,x2,y2)
End Sub

Sub Action_Redraw()
Call Client.SendMessage("PCB:Zoom","Action=Redraw", 255, Client.CurrentView)
Call Client.SendMessage("PCB:Zoom","Action=All", 255, Client.CurrentView)
End Sub

'SetState_Origin
Sub Set_Origin()
Set Board = PCBServer.GetCurrentPCBBoard
Board.SetState_YOrigin(80000000)
Board.SetState_XOrigin(80000000)
End Sub

Sub Board_Shape()
Call AddStringParameter("Scope", "All")
RunProcess("PCB:Select")

Call AddStringParameter("Mode", "BOARDOUTLINE_FROM_SEL_PRIMS")
RunProcess("PCB:PlaceBoardOutline")

Call AddStringParameter("Size", "2.500MM")
RunProcess("PCB:SnapGrid")

Call AddStringParameter("MeasurementUnit", "Toggle")
RunProcess("PCB:DocumentPreferences")
End Sub

Sub Button1Click(Sender)
call Start_PCBServer() 'Start PCBServer
Board_chang = Round(Edit1.Text)
Iter_Num = Round(Edit3.Text) 'Get Iteration Number

call Set_Origin() 'Set Shape Relative to the origin
call Paint_Rectangle(-Board_chang/2,-Board_chang/2,Board_chang/2,Board_chang/2)
Call Board_Shape()
Call Y_Shape(0,0,30,4)
Action_Redraw()
Close
End Sub

Sub Y_Shape(x,y,L,Iter_Num)
a = PI/4
L1=L*2/3
If Iter_Num=0 Then 'If Iter_Num = 0
Call Y_Xing(x,y,L,L1,a) 'Draw Y
Else
Call Y_Xing(x,y,L,L1,a) 'Draw Y

Call Y_Shape(x-L1*sin(a),y+L+L1*cos(a),L/2,Iter_Num-1)
Call Y_Shape(x+L1*sin(a),y+L+L1*cos(a),L/2,Iter_Num-1)
End If
End Sub

Sub Y_Xing(x,y,L,L1,a)
Call Paint_Line(x,y,x,y+L) 'Draw Vertical Line
Call Paint_Line(x,y+L,x-L1*sin(a),y+L+L1*cos(a)) 'Draw Left Diagonal Line
Call Paint_Line(x,y+L,x+L1*sin(a),y+L+L1*cos(a)) 'Draw Right Diagonal Line

'Draw Left Y
Call Paint_Line(-y,x,-(y+L),x) 'Draw Vertical Line
Call Paint_Line(-(y+L),x,-(y+L+L1*cos(a)),x-L1*sin(a)) 'Draw Left Diagonal Line
Call Paint_Line(-(y+L),x,-(y+L+L1*cos(a)),x+L1*sin(a)) 'Draw Right Diagonal Line

'DraW Down Y
Call Paint_Line(x,-y,x,-(y+L)) 'Draw Vertical Line
Call Paint_Line(x,-(y+L),x-L1*sin(a),-(y+L+L1*cos(a))) 'Draw Left Diagonal Line
Call Paint_Line(x,-(y+L),x+L1*sin(a),-(y+L+L1*cos(a))) 'Draw Right Diagonal Line

'Draw Right Y
Call Paint_Line(y,-x,y+L,-x) 'Draw Vertical Line
Call Paint_Line(y+L,-x,y+L+L1*cos(a),-(x-L1*sin(a))) 'Draw Left Diagonal Line
Call Paint_Line(y+L,-x,y+L+L1*cos(a),-(x+L1*sin(a))) 'Draw Right Diagonal Line
End Sub

参考资料:

[1]付丽华.一种基于Y分形的平面微带天线设计与优化[EB/OL].http://www.elecfans.com/soft/69/2019/20190412905256.html,2019.

[2] Altium Limited.PCB API Design Objects Interfaces[EB/OL].https://techdocs.altium.com/display/SCRT/PCB+API+Design+Objects+Interfaces,2017-9-13.

Y分形的平面微带天线生成过程的更多相关文章

  1. Three.js基础探寻四——立方体、平面与球体

    前面简单介绍了webGL和Three.js的背景以及照相机的设定,接下来介绍一些Three.js中的几何形状. 1.立方体 虽然这一形状的名字叫立方体(CubeGeometry),但它其实是长方体,也 ...

  2. OpenCASCADE直线与平面求交

    OpenCASCADE直线与平面求交 在<解析几何>相关的书中都给出了直线和平面的一般方程和参数方程.其中直线的一般方程有点向式形式的. 由于过空间一点可作且只能作一条直线平行于已知直线, ...

  3. 《Three.js 入门指南》3.1.1 - 基本几何形状 - 平面(PlaneGeometry)

    3.1 基本几何形状 平面(PlaneGeometry) 说明: 这里的平面(PlaneGeometry)其实是一个长方形,而不是数学意义上无限大小的平面. 构造函数: THREE.PlaneGeom ...

  4. Three.js-任意平面的镜像矩阵

    1. 什么是镜像变换 直接看下面这张图: 这张图很好的诠释了镜像变化,关于y轴的变化,关于x轴的变化.这种关于任意轴的变化,就是镜像了. 2d下的镜像矩阵变化 我们以图像关于Y轴镜像为例子:原图形和结 ...

  5. transformjs玩转星球

    如你所见.这篇就是要讲下使用transformjs制作星球的过程.你也可以无视文章,直接去看源码和在线演示: 源码 | 在线演示 代码100行多一点,直接看也没有什么压力.下面分几步讲解下. 生成球上 ...

  6. 百度Map与HT for Web结合的GIS网络拓扑应用

    在<HT for Web整合OpenLayers实现GIS地图应用>篇中介绍了HT for Web与OpenLayers的整合,不少朋友反应国内用得比较多的还是百度地图,虽然HT整合百度地 ...

  7. 百度地图与HT for Web结合的GIS网络拓扑应用

    在<HT for Web整合OpenLayers实现GIS地图应用>篇中介绍了HT for Web与OpenLayers的整合,不少朋友反应国内用得比较多的还是百度地图,虽然HT整合百度地 ...

  8. three.js 之旅 (三)

    复制自:http://www.cnblogs.com/ssrsblogs/p/5611332.html 创建模型: 1.长方体: THREE.CubeGeometry(width, height, d ...

  9. 粒子系统模块(Particle System Modules40)

    粒子系统模块(Particle System Modules40) 粒子系统模块(忍者飞镖) 粒子系统(忍者飞镖)(Particle System (Shuriken)) 用模块描述粒子一段时间内的行 ...

随机推荐

  1. OpenWrt tcpdump 抓包

    路由器用的是 网件的 4300 刷的是石像鬼双固件 1, 安装支持库opkg updateopkg install libpcapopkg install tcpdump 2, 设置条件开始捕获tcp ...

  2. java开发——Cloneable接口、clone()方法和深浅拷贝

    1.实现Cloneable接口表明该类的对象是允许克隆的. 2.允许克隆的意思是:可以调用clone()方法. 3.深拷贝还是浅拷贝,取决于如何重写Object的clone()方法. 4.原对象和克隆 ...

  3. selenium基本对象之——数值型

    python的数值类型,除了魔法方法以为,只有下面的这些方法: 整形的方法有:as_integer_ratio.bit_length.from_bytes.to_bytes.conjugate.ima ...

  4. 把读取sql的结果写入到excel文件

    1.利用pandas模块 # encoding: utf-8 import time import pandas as pd import pymysql def getrel(sql): ''' 连 ...

  5. (转)协议森林04 地址耗尽危机 (IPv4与IPv6地址)

    协议森林04 地址耗尽危机 (IPv4与IPv6地址) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! IP地址是IP协议的重要组 ...

  6. 两个div,高度都是100% 用 display:flex; 和 min-height 一边撑高了,另一边自动走 (不加flex不自动撑开)

    两个div,高度都是100% 用 display:flex; 和 min-height 一边撑高了,另一边自动走

  7. 【vue生命周期】- 详解

    这篇文章通俗易懂,写的不错,本文转载至:https://www.cnblogs.com/happ0/p/8075562.html 详解Vue Lifecycle 先来看看vue官网对vue生命周期的介 ...

  8. 在Servlet端获取html页面选中的checkbox值,request获取页面checkbox(复选框)值

    html端代码: 选项框: <input type="checkbox" name="crowd" value="选项一">选项 ...

  9. 作为一位Vue工程师,这些开发技巧你都会吗?

    路由参数解耦 一般在组件内使用路由参数,大多数人会这样做: export default { methods: { getParamsId() { return this.$route.params. ...

  10. java实现QQ、微信、轰炸机,撩妹,抖图功能,轻松自如

    今天交大家一个很牛的功能,让你朋友服你,他不扶你你来找我. 打游戏被骂,骂不过你来找我,我们有神器,直到他怕了为止. 废话少说,代码如下,动手,干就完了 乞丐版如下 参考连接:Java实现QQ微信轰炸 ...