AddCurve方法
C#上位机中ZedGraph控件的使用

C#上位机中ZedGraph控件的使⽤上位机程序控制PLC模拟量通道输出周期性正弦波信号,并采集所造成改变的模拟量输⼊信号,并绘制数据变化曲线。
界⾯如图:最后测试效果如图:代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using ZedGraph;namespace ProfessionalTest{public partial class FrMain : Form{#region 构造函数int tickStart = 0;int tickStart2 = 0;int zQ1 = 0;int zQ2 = 0;int fZ1 = 0;int fZ2 = 0;int pY1 = 0;int pY2 = 0;public FrMain(){InitializeComponent();this.ControlBox = false;}#endregion/// <summary>/// 窗体加载对两个表进⾏初始化/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void FrMain_Load(object sender, EventArgs e){//⽆需油源流量压⼒设置,油源⼿动控制//OPC.OpcServer server = OPC.OpcServer.GetServer(); ///⼀个PC ACCESS 即为⼀个OPC server//server["油源"]["专业台当前流量"] = (float)50;//server["油源"]["专业台当前压⼒"] = (float)10;#region 负载模拟1//获取引⽤GraphPane myPane = zedGraphControl1.GraphPane;//设置标题myPane.Title.Text = "负载模拟1";//设置X轴说明⽂字myPane.XAxis.Title.Text = "时间";//设置Y轴说明⽂字myPane.YAxis.Title.Text = "给定压⼒/实测压⼒";//设置1200个点,假设每50毫秒更新⼀次,刚好检测1分钟,⼀旦构造后将不能更改这个值RollingPointPairList list = new RollingPointPairList(1200);RollingPointPairList list2 = new RollingPointPairList(1200);//开始,增加的线是没有数据点的(也就是list为空)//增加⼀条名称:Voltage,颜⾊Color.Bule,⽆符号,⽆数据的空线条LineItem curve = myPane.AddCurve("给定压⼒", list, Color.Blue, SymbolType.None);LineItem curve2 = myPane.AddCurve("实际压⼒", list2, Color.Red, SymbolType.None);timerDraw.Interval = 1000; //设置timer控件的间隔为500毫秒timerDraw.Enabled = true; //timer可⽤timerDraw.Stop(); //开始myPane.XAxis.Scale.Min = 0; //X轴最⼩值0myPane.XAxis.Scale.Max = 30; //X轴最⼤30myPane.XAxis.Scale.MinorStep = 1;//X轴⼩步长1,也就是⼩间隔myPane.XAxis.Scale.MajorStep = 5;//X轴⼤步长为5,也就是显⽰⽂字的⼤间隔//保存开始时间//tickStart = Environment.TickCount;#endregion#region 负载模拟2//获取引⽤GraphPane myPane1 = zedGraphControl2.GraphPane;//设置标题myPane1.Title.Text = "负载模拟2";//设置X轴说明⽂字myPane1.XAxis.Title.Text = "时间";//设置Y轴说明⽂字myPane1.YAxis.Title.Text = "给定压⼒/实测压⼒";//设置1200个点,假设每50毫秒更新⼀次,刚好检测1分钟,⼀旦构造后将不能更改这个值RollingPointPairList list3 = new RollingPointPairList(1200);RollingPointPairList list4 = new RollingPointPairList(1200);//开始,增加的线是没有数据点的(也就是list为空)//增加⼀条名称:Voltage,颜⾊Color.Bule,⽆符号,⽆数据的空线条LineItem curve3 = myPane1.AddCurve("给定压⼒", list3, Color.Blue, SymbolType.None); LineItem curve4 = myPane1.AddCurve("实际压⼒", list4, Color.Red, SymbolType.None); timer1Draw.Interval = 1000; //设置timer控件的间隔为500毫秒timer1Draw.Enabled = true; //timer可⽤timer1Draw.Stop(); //暂不启动myPane1.XAxis.Scale.Min = 0; //X轴最⼩值0myPane1.XAxis.Scale.Max = 30; //X轴最⼤30myPane1.XAxis.Scale.MinorStep = 1;//X轴⼩步长1,也就是⼩间隔myPane1.XAxis.Scale.MajorStep = 5;//X轴⼤步长为5,也就是显⽰⽂字的⼤间隔//改变轴的刻度zedGraphControl2.AxisChange();//保存开始时间//tickStart2 = Environment.TickCount;#endregion}/// <summary>/// 负载1模拟开始/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){try{zQ1 = int.Parse(textBox1.Text);fZ1 = int.Parse(textBox2.Text);pY1 = int.Parse(textBox5.Text);if (zQ1<=10){MessageBox.Show("周期过⼩,请将周期设为10秒以上") ;return;}if (fZ1<=5){MessageBox.Show("幅值过⼩,请将幅值设为5MPa以上");return;}else if (fZ1>=15){MessageBox.Show("幅值过⼤,请将幅值设为15MPa以下");return;}if (pY1-fZ1 <0){MessageBox.Show("压⼒过⼩,请将压⼒设为0MPa以上");return;}else if (fZ1 +pY1> 31.5){MessageBox.Show("压⼒过⼤,请将压⼒设为15MPa以下");return;}button1.Enabled = false;timerDraw.Start();//保存开始时间tickStart = Environment.TickCount;#region 清空原有图表//确保CurveList不为空if (zedGraphControl1.GraphPane.CurveList.Count <= 0)//取Graph第⼀个曲线,也就是第⼀步:在GraphPane.CurveList集合中查找CurveItemLineItem curve = zedGraphControl1.GraphPane.CurveList[0] as LineItem;LineItem curve2 = zedGraphControl1.GraphPane.CurveList[1] as LineItem;if (curve == null | curve2 == null){return;}//第⼆步:在CurveItem中访问PointPairList(或者其它的IPointList),根据⾃⼰的需要增加新数据或修改已存在的数据 IPointListEdit list = curve.Points as IPointListEdit;IPointListEdit list2 = curve2.Points as IPointListEdit;list.Clear();list2.Clear();//第三步:调⽤Form.Invalidate()⽅法更新图表zedGraphControl1.Invalidate();#endregion}catch (Exception){MessageBox.Show("请输⼊正确数值");}}/// <summary>/// 负载2模拟开始/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){try{zQ2 = int.Parse(textBox3.Text);fZ2 = int.Parse(textBox4.Text);pY2 = int.Parse(textBox6.Text);if (zQ2 <= 10){MessageBox.Show("周期过⼩,请将周期设为10秒以上");return;}if (fZ2 <= 5){MessageBox.Show("幅值过⼩,请将幅值设为5MPa以上");return;}else if (fZ2 >= 15){MessageBox.Show("幅值过⼤,请将幅值设为15MPa以下");return;}if (pY2 - fZ2 < 0){MessageBox.Show("压⼒过⼩,请将压⼒设为0MPa以上");return;}else if (fZ2 + pY2 > 31.5){MessageBox.Show("压⼒过⼤,请将压⼒设为15MPa以下");return;}button2.Enabled = false;timer1Draw.Start();//保存开始时间tickStart2 = Environment.TickCount;#region 清空原有图表//确保CurveList不为空if (zedGraphControl2.GraphPane.CurveList.Count <= 0){return;}//取Graph第⼀个曲线,也就是第⼀步:在GraphPane.CurveList集合中查找CurveItemLineItem curve3 = zedGraphControl2.GraphPane.CurveList[0] as LineItem;LineItem curve4 = zedGraphControl2.GraphPane.CurveList[1] as LineItem;if (curve3 == null | curve4 == null){return;}//第⼆步:在CurveItem中访问PointPairList(或者其它的IPointList),根据⾃⼰的需要增加新数据或修改已存在的数据 IPointListEdit list3 = curve3.Points as IPointListEdit;IPointListEdit list4 = curve4.Points as IPointListEdit;if (list3 == null | list4 == null)list3.Clear();list4.Clear();//第三步:调⽤Form.Invalidate()⽅法更新图表zedGraphControl2.Invalidate();#endregion}catch (Exception){MessageBox.Show("请输⼊正确数值");}}/// <summary>/// 负载1模拟停⽌/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button3_Click(object sender, EventArgs e){timerDraw.Enabled = false;timerDraw.Stop();button1.Enabled = true;OPC.OpcServer server = OPC.OpcServer.GetServer();server["专业试验台"]["⽐例溢流阀4_1模拟缓存"] = (float)0;//写⼊压⼒0}/// <summary>/// 负载2模拟停⽌/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button4_Click(object sender, EventArgs e){timer1Draw.Enabled = false;timer1Draw.Stop();button2.Enabled = true;OPC.OpcServer server = OPC.OpcServer.GetServer();server["专业试验台"]["⽐例溢流阀4_2模拟缓存"] = (float)0;//写⼊压⼒0}/// <summary>/// 负载模拟1表格定时更新/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void timerDraw_Tick(object sender, EventArgs e){//确保CurveList不为空if (zedGraphControl1.GraphPane.CurveList.Count <= 0){return;}//取Graph第⼀个曲线,也就是第⼀步:在GraphPane.CurveList集合中查找CurveItemLineItem curve = zedGraphControl1.GraphPane.CurveList[0] as LineItem;LineItem curve2 = zedGraphControl1.GraphPane.CurveList[1] as LineItem;if (curve == null | curve2 == null){return;}//第⼆步:在CurveItem中访问PointPairList(或者其它的IPointList),根据⾃⼰的需要增加新数据或修改已存在的数据 IPointListEdit list = curve.Points as IPointListEdit;IPointListEdit list2 = curve2.Points as IPointListEdit;if (list == null | list2 == null){return;}// 时间⽤秒表⽰double time = (Environment.TickCount - tickStart) / 1000.0;// 周期为zQ1,幅值为fZ1OPC.OpcServer server = OPC.OpcServer.GetServer();float gDYL = (float)(fZ1 * Math.Sin(2.0 * Math.PI * time / zQ1))+pY1;//给定压⼒值float sJYL = server["专业试验台"]["负载模拟压⼒缓存1_1"];//实际读取压⼒值server["专业试验台"]["⽐例溢流阀4_1模拟缓存"] = gDYL;//将周期值写⼊PLClist.Add(time, (double)gDYL);list2.Add(time, (double)sJYL);Console.WriteLine(time.ToString());Scale xScale = zedGraphControl1.GraphPane.XAxis.Scale;if (time > xScale.Max - xScale.MajorStep){xScale.Max = time + xScale.MajorStep;xScale.Min = xScale.Max - 30.0;}zedGraphControl1.AxisChange();//第四步:调⽤Form.Invalidate()⽅法更新图表zedGraphControl1.Invalidate();}/// <summary>/// 负载模拟2表格定时更新/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void timer1Draw_Tick(object sender, EventArgs e){//确保CurveList不为空if (zedGraphControl2.GraphPane.CurveList.Count <= 0){return;}//取Graph第⼀个曲线,也就是第⼀步:在GraphPane.CurveList集合中查找CurveItemLineItem curve3 = zedGraphControl2.GraphPane.CurveList[0] as LineItem;LineItem curve4 = zedGraphControl2.GraphPane.CurveList[1] as LineItem;if (curve3 == null | curve4 == null){return;}//第⼆步:在CurveItem中访问PointPairList(或者其它的IPointList),根据⾃⼰的需要增加新数据或修改已存在的数据 IPointListEdit list3 = curve3.Points as IPointListEdit;IPointListEdit list4 = curve4.Points as IPointListEdit;if (list3 == null | list4 == null){return;}// 时间⽤秒表⽰double time = (Environment.TickCount - tickStart2) / 1000.0;// 周期为zQ2,幅值为fZ2OPC.OpcServer server = OPC.OpcServer.GetServer();float gDYL = (float)(fZ2 * Math.Sin(2.0 * Math.PI * time / zQ2))+pY2;//给定压⼒值float sJYL = server["专业试验台"]["负载模拟压⼒缓存1_2"];//实际读取压⼒值server["专业试验台"]["⽐例溢流阀4_2模拟缓存"] = gDYL;//将周期值写⼊PLClist3.Add(time, gDYL);list4.Add(time, sJYL);Console.WriteLine(time.ToString());Scale xScale = zedGraphControl2.GraphPane.XAxis.Scale;if (time > xScale.Max - xScale.MajorStep){xScale.Max = time + xScale.MajorStep;xScale.Min = xScale.Max - 30.0;}//第三步:调⽤ZedGraphControl.AxisChange()⽅法更新X和Y轴的范围zedGraphControl2.AxisChange();//第四步:调⽤Form.Invalidate()⽅法更新图表zedGraphControl2.Invalidate();}/// <summary>/// 关闭窗体/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button5_Click(object sender, EventArgs e){OPC.OpcServer server = OPC.OpcServer.GetServer();server["专业试验台"]["⽐例溢流阀4_1模拟缓存"] = (float)0;//写⼊压⼒0server["专业试验台"]["⽐例溢流阀4_2模拟缓存"] = (float)0;//写⼊压⼒0this.Close();}}}。
ADAMS后处理—曲线图

ADAMS/PostProcessor绘制仿真结果的曲线图将仿真结果用曲线图的形式表达出来,能更深刻地了解模型的特性。
ADAMS/PostProcessor能够绘制仿真自动生成结果的曲线图,包括间隙检查等,还可将结果以用户定义的量度或需求绘制出来,甚至可以将输入进来的测试数据绘制成曲线。
绘制出的曲线由数据点组成,每个数据点代表在仿真中每个输出步长上创建的输出点的数据。
在创建了曲线之后,可以在曲线上进行后处理操作,比如通过信号处理进行数据过滤,以及数学运算等。
也可以手动改变数值或者写表达式来定义曲线上的数值。
7.4.1 由仿真结果绘制曲线图的类型ADAMS提供了由几种不同类型仿真结果绘制曲线图的功能。
对象(Object)—模型中物体的特性,如某个构件的质心位置等。
如果要察看物体的特性曲线图,必须先运行ADAMS/View后再进入ADAMS/PostProcessor,或者导入一个命令文件(.cmd)。
量度(Measure)—模型中可计量对象的特性,如施加在弹簧阻尼器上的力或者物体之间的相互作用。
也可以直接在ADAMS产品中创建量度,或者导入测试数据作为量度。
要察看量度的话,需要先运行ADAMS/View后运行ADAMS/PostProcessor,或者导入一个模型和结果文件(.res)。
结果(Result)—ADAMS在仿真过程中计算出的一套基本状态变量。
ADAMS在每个仿真输出步长上输出数据。
一个结果的构成通常是以时间为横坐标的特定量(比如,构件的x方向位移或者铰链上y方向的力矩)。
请求(Request)—要求ADAMS/Solver输出的数据。
可以得到要考察的位移、速度、加速度、或者力的信息。
系统模态—察看线性化仿真得到的离散特征值。
间隙分析—察看动画中的物体之间的最小距离。
在绘制曲线图模式下,用控制面板选择需要绘制的仿真结果。
在选择了仿真结果以绘制曲线后,可以安排结果曲线的布局,包括增加必要的轴线、确定量度单位的标签、曲线的标题、描叙曲线数据的标注等等。
3种c#画图方法

g.DrawLine(Pens.Black,20+iX*5,220,20+iX*5,220-2); g.DrawLine(Pens.Black,20+iX*6,220,20+iX*6,220-2); //y 轴标格 g.DrawLine(Pens.Black, 20, 220 - iY*1, 20 + 2, 220 - iY*1); g.DrawLine(Pens.Black, 20, 220 - iY*2, 20 + 2, 220 - iY*2); g.DrawLine(Pens.Black, 20, 220 - iY*3, 20 + 2, 220 - iY*3); g.DrawLine(Pens.Black, 20, 220 - iY*4, 20 + 2, 220 - iY*4); g.DrawLine(Pens.Black, 20, 220 - iY*5, 20 + 2, 220 - iY*5); g.DrawLine(Pens.Black, 20, 220 - iY*6, 20 + 2, 220 - iY*6); // double dblX1=20; double dblY1=220; for(int i=0;i<arrData.Count;i++) {
GraphicsPath myPath = new GraphicsPath();
//AddCurve(点阵,起点,终点,弯曲程度)
myPath.AddCurve(curvePoints, 0, 7, 0.8f);
Pen myPen = new Pen(Color.Red, 1);
IMG.DrawPath(myPen, myPath);
GraphicsPath-类

GraphicsPath 类表示一系列相互连接的直线和曲线。
此类不能被继承。
继承层次结构System.ObjectSystem.MarshalByRefObjectSystem.Drawing.Drawing2D.GraphicsPath命名空间:System.Drawing.Drawing2D程序集:System.Drawing(在 System.Drawing.dll 中)语法C#声明Public NotInheritable Class GraphicsPath Inherits MarshalByRefObject Implements ICloneable, IDisposable GraphicsPath 类型公开以下成员。
构造函数页首属性页首方法页首备注应用程序使用路径来绘制形状的轮廓、填充形状内部和创建剪辑区域。
图形引擎在世界坐标空间中维护路径内的几何形状的坐标。
路径可由任意数目的图形(子路径)组成。
每一图形都是由一系列相互连接的直线和曲线或几何形状基元构成的。
图形的起始点是相互连接的一系列直线和曲线中的第一点。
终结点是该序列中的最后一点。
几何形状基元的起始点和终结点都是由基元规范定义的。
由一系列相互连接的直线和曲线构成的图形(其起始点和终结点可以是同一点)是开放的图形,除非它被显式闭合。
可以通过使用CloseFigure方法显式闭合一个图形,这通过连接一条从终结点到起始点的直线闭合当前图形。
由几何形状基元构成的图形是闭合的图形。
为进行填充和剪辑(例如,如果使用FillPath呈现一个路径),通过添加一条从该图形的起始点到其终结点的直线来闭合所有开放的图形。
当创建路径或当闭合图形时,即隐式开始一个新图形。
当调用StartFigure方法时,新图形是显式创建的。
在将几何形状基元添加到路径时,它添加包含几何形状的图形,并且还隐式开始一个新图形。
因此,在路径中始终有一个当前图形。
在将直线和曲线添加到路径中时,根据需要添加一条隐式直线以将当前图形的终结点连接到新直线和曲线的起始点,从而构成一系列相互连接的直线和曲线。
qwt的用法

qwt的用法Qwt是一个C++图形库,用于在Qt应用程序中添加可视化元素。
它提供了基于Qt的绘图和布局机制,可以轻松地在应用程序中添加曲线绘图、仪表、图形控件和其它可视化元素。
以下是使用Qwt的步骤:1. 安装Qwt库:首先需要从官网下载Qwt库并按照它们的指示进行安装。
警告:Qwt只能与与您的Qt版本匹配的Qwt版本一起使用。
2. 将Qwt添加到Qt项目:将Qwt库添加到Qt项目中需要在.pro文件中添加相应的INCLUDEPATH和LIBS。
例如:INCLUDEPATH += /usr/include/qwtLIBS += -lqwt3. 创建一个QwtPlot对象:从QWidget派生一个QwtPlot对象,并使用addCurve()方法添加绘图曲线:QwtPlot *plot = new QwtPlot(this);plot->setTitle("My Plot");QwtPlotCurve *curve = new QwtPlotCurve("My Curve");curve->setData(xData, yData);curve->attach(plot);4. 设置绘图属性:可以通过QwtPlot类的方法来设置绘图属性,如设置坐标轴、网格线、标题等。
plot->setAxisTitle(QwtPlot::xBottom, "X Axis");plot->setAxisTitle(QwtPlot::yLeft, "Y Axis");plot->insertLegend(new QwtLegend(), QwtPlot::RightLegend);5. 显示绘图:将QwtPlot对象添加到应用程序中并显示:plot->resize(600, 400);plot->show();以上是Qwt的基本用法。
GDI+高级编程

第13章GDI+高级编程*本章介绍GDI+的路径、区域、变换、图像处理和图元文件等高级编程内容。
路径由许多不同类型的点所构成,用于表示复杂的不规则图形。
区域是由矩形、椭圆、多边形等几何形状组合构成的一种封闭图形,可用于复杂图形的绘制、剪裁和击中测试等。
Graphics类可对绘制的图形进行平移、旋转和伸缩变换。
矩阵类Matrix则可用于图形、图像、颜色、路径、区域等对象的变换。
GDI+的图像处理功能强大,可以加载、保存和操作多种格式的图像。
GDI+的图元文件格式为EMF+,可用来保存和重放绘图记录,也能用于交互绘图的重绘操作。
13.1 路径路径(path)是一系列相互连接的直线和曲线,由许多不同类型的点所构成,用于表示复杂的不规则图形,也叫做图形路径(graphics path)。
路径可被以画轮廓和填充的形式显示输出,也可以用于创建区域和路径渐变刷等。
虽然在GDI中也有路径(本课件未讲),但是它只是作为DC的一种状态才能存在。
独立的路径对象,则是GDI+新增加的。
13.1.1 图形路径在GDI+中,路径由图形路径类GraphicsPath表示,它是GDI+基类GdiplusBase的直接派生类。
1.构造函数GraphicsPath类有三个构造函数:GraphicsPath(FillMode fillMode = FillModeAlternate); // 构造一个空路径GraphicsPath(const Point *points, const BYTE *types, INT count, FillMode fillMode = FillModeAlternate); // 构造含指定整数型点数组的路径GraphicsPath(const PointF *points, const BYTE *types, INT count, FillMode fillMode = FillModeAlternate); // 构造含指定浮数型点数组的路径其中:●填充模式参数fillMode在上一章的画填充多边形和曲线时已经讲过,枚举类型FillMode除了可取这里的默认值FillModeAlternate(交替填充模式)之外,还有一个可取的值是FillModeWinding(环绕替填充模式)。
贝塞尔曲线基本用法

贝塞尔曲线基本⽤法使⽤UIBezierPath可以创建基于⽮量的路径,此类是Core Graphics框架关于路径的封装。
使⽤此类可以定义简单的形状,如椭圆、矩形或者有多个直线和曲线段组成的形状等。
UIBezierPath是CGPathRef数据类型的封装。
如果是基于⽮量形状的路径,都⽤直线和曲线去创建。
我们使⽤直线段去创建矩形和多边形,使⽤曲线去创建圆弧(arc)、圆或者其他复杂的曲线形状。
1.使⽤UIBezierPath画图步骤:2.创建⼀个UIBezierPath对象3.调⽤-moveToPoint:设置初始线段的起点4.添加线或者曲线去定义⼀个或者多个⼦路径5.改变UIBezierPath对象跟绘图相关的属性。
如,我们可以设置画笔的属性、填充样式等UIBezierPath创建⽅法介绍1.UIBezierPath类提供了哪些创建⽅式,这些都是⼯⼚⽅法,直接使⽤即可。
+ (instancetype)bezierPath;+ (instancetype)bezierPathWithRect:(CGRect)rect;+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;+ (instancetype)bezierPathWithRoundedRect:(CGRect)rectcornerRadius:(CGFloat)cornerRadius;+ (instancetype)bezierPathWithRoundedRect:(CGRect)rectbyRoundingCorners:(UIRectCorner)cornerscornerRadii:(CGSize)cornerRadii;+ (instancetype)bezierPathWithArcCenter:(CGPoint)centerradius:(CGFloat)radiusstartAngle:(CGFloat)startAngleendAngle:(CGFloat)endAngleclockwise:(BOOL)clockwise;+ (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;2.下⾯我们⼀个⼀个地介绍其⽤途。
AMS后处理—曲线图

A M S后处理—曲线图文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]ADAMS/PostProcessor绘制仿真结果的曲线图将仿真结果用曲线图的形式表达出来,能更深刻地了解模型的特性。
ADAMS/PostProcessor能够绘制仿真自动生成结果的曲线图,包括间隙检查等,还可将结果以用户定义的量度或需求绘制出来,甚至可以将输入进来的测试数据绘制成曲线。
绘制出的曲线由数据点组成,每个数据点代表在仿真中每个输出步长上创建的输出点的数据。
在创建了曲线之后,可以在曲线上进行后处理操作,比如通过信号处理进行数据过滤,以及数学运算等。
也可以手动改变数值或者写表达式来定义曲线上的数值。
由仿真结果绘制曲线图的类型ADAMS提供了由几种不同类型仿真结果绘制曲线图的功能。
对象(Object)—模型中物体的特性,如某个构件的质心位置等。
如果要察看物体的特性曲线图,必须先运行ADAMS/View后再进入ADAMS/PostProcessor,或者导入一个命令文件(.cmd)。
量度(Measure)—模型中可计量对象的特性,如施加在弹簧阻尼器上的力或者物体之间的相互作用。
也可以直接在ADAMS产品中创建量度,或者导入测试数据作为量度。
要察看量度的话,需要先运行ADAMS/View后运行ADAMS/PostProcessor,或者导入一个模型和结果文件(.res)。
结果(Result)—ADAMS在仿真过程中计算出的一套基本状态变量。
ADAMS在每个仿真输出步长上输出数据。
一个结果的构成通常是以时间为横坐标的特定量(比如,构件的x方向位移或者铰链上y方向的力矩)。
请求(Request)—要求ADAMS/Solver输出的数据。
可以得到要考察的位移、速度、加速度、或者力的信息。
系统模态—察看线性化仿真得到的离散特征值。
间隙分析—察看动画中的物体之间的最小距离。
在绘制曲线图模式下,用控制面板选择需要绘制的仿真结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当本方法应用于 Shapes对象时,返回一个Shape对象,该对象代表工作表中的贝塞尔曲线。
当本方法应用于 CanvasShapes对象时,返回一个 Shape 对象,该对象代表绘图画布中的贝塞尔曲线。
expression.AddCurve(SafeArrayOfPoints)
expression 必需。
该表达式返回“应用于”列表中的对象之一。
SafeArrayOfPoints Variant 类型,必需。
用于指定曲线上的顶点和控制点的坐标对数组。
所指定的第一个点应是起始顶点,其余两个点应是第一个贝塞尔线段的控制点。
然后,对于曲线的其余每个线段,指定一个顶点和两个控制点。
所指定的最后一个点应是曲线的终止顶点。
请注意,所指定的点的数目必须是 3n+1 个,其中 n 为曲线中线段的数目。
Excel VBA教程:AddCurve方法·示例
下例向myDocument 添加一条两线段的贝塞尔曲线。
Dim pts(1 To 7, 1 To 2) As Single
pts(1, 1) = 0
pts(1, 2) = 0
pts(2, 1) = 72
pts(2, 2) = 72
pts(3, 1) = 100
pts(3, 2) = 40
pts(4, 1) = 20
pts(4, 2) = 50
pts(5, 1) = 90
pts(5, 2) = 120
pts(6, 1) = 60
pts(6, 2) = 30
pts(7, 1) = 150
pts(7, 2) = 90
Set myDocument = Worksheets(1)
myDocument.Shapes.AddCurve SafeArrayOfPoints:=pts。