当前位置:首页 » 操作系统 » 绘制曲线算法

绘制曲线算法

发布时间: 2022-08-03 04:11:03

㈠ asp.net 绘制曲线图算法问题

因为这里的纵坐标最大值是360 因为绘制的时候需要用比例来计算
int s = 2500 - 50 * i * 5; 这里知识作为参数传递给g.DrawString(s.ToString(), font, brush, 10, 60 + 30 * i); 方法,按你这里的意思就是给横坐标标识(横坐标输出的字符串。)
p[i].X = 40 + 20 * i;
p[i].Y = 360 - (ts / 5) * 3 / 5;
想要对应准确,就要结合你的数据在上面这算法进行计算,再把坐标画进图就OK了
其实只要远离弄明白就很简单,
通俗点说,就是先画出横纵坐标轴,在通过比例计算出数据在坐标轴上的坐标,保存到数组,再把数组添加到图形中就OK了
你这里面最关键的地方就是坐标的计算

㈡ 给定若干个点,如何画出一条通过各个点的光滑曲线

这种算法叫做差值。

看看B样条曲线差值算法吧。

㈢ Bezier曲线 算法 程序

看一下下面的Bezier曲线绘制程序,没有错误提示,但是绘制不出Bezier曲线#include "stdafx.h"#include "Test.h"#include "TestDoc.h"#include "TestView.h"#include "math.h"//包含数学头文件#define N_MAX_POINT 10//控制多边形的最大顶点数#define ROUND(a) int(a+0.5)//四舍五入#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CTestViewIMPLEMENT_DYNCREATE(CTestView, CView)BEGIN_MESSAGE_MAP(CTestView, CView) //{{AFX_MSG_MAP(CTestView) ON_COMMAND(ID_MENUBezierCurve, OnMENUBezierCurve) ON_WM_LBUTTONDOWN() ON_WM_RBUTTONDOWN() //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CTestView construction/destructionCTestView::CTestView(){ // TODO: add construction code here Flag=false;}CTestView::~CTestView(){}BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs){ // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CTestView drawingvoid CTestView::OnDraw(CDC* pDC){ CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here}/////////////////////////////////////////////////////////////////////////////// CTestView printingBOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo){ // default preparation return DoPreparePrinting(pInfo);}void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){ // TODO: add extra initialization before printing}void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){ // TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CTestView diagnostics#ifdef _DEBUGvoid CTestView::AssertValid() const{ CView::AssertValid();}void CTestView::Dump(CDumpContext& dc) const{ CView::Dump(dc);}CTestDoc* CTestView::GetDocument() // non-debug version is inline{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc))); return (CTestDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CTestView message handlersvoid CTestView::OnMENUBezierCurve()//菜单函数{ // TODO: Add your command handler code here RedrawWindow(); AfxGetMainWnd()->SetWindowText("曲线和曲面:Bezier曲线");//显示标题 MessageBox("单击左键绘制控制多边形,单击右键绘制曲线","提示",MB_OK); pt=new CPoint[N_MAX_POINT]; Flag=true;CtrlPoint=0;}void CTestView::DrawBezier()//绘制Bezier曲线{ CClientDC dc(this); double x,y; int rate=800,n; n=CtrlPoint-1; for(double t=0;t<=1;t+=1.0/rate) { x=0;y=0; for(int i=0;i<=n;i++) { x+=pt[i].x*Cnk(n,i)*pow(t,i)*pow(1-t,n-i); y+=pt[i].y*Cnk(n,i)*pow(t,i)*pow(1-t,n-i); } dc.SetPixel(ROUND(x),ROUND(y),RGB(0,0,255));//曲线颜色 }}double CTestView::Cnk(const int &n, const int &i)//计算Bernstein第一项函数{ return double(Factorial(n)/(Factorial(i)*Factorial(n-i)));}int CTestView::Factorial(int m)//阶乘函数{ int f=1; for(int i=1;i<=m;i++) f*=i; return f;}void CTestView::DrawCharPolygon()//绘制控制多边形函数{ CClientDC dc(this); CPen MyPen,*pOldPen; MyPen.CreatePen(PS_SOLID,3,RGB(0,0,0));//控制多边形 pOldPen=dc.SelectObject(&MyPen); for(int i=0;i<CtrlPoint;i++) { if(i==0) { dc.MoveTo(pt[i]); dc.Ellipse(pt[i].x-2,pt[i].y-2,pt[i].x+2,pt[i].y+2); } else { dc.LineTo(pt[i]); dc.Ellipse(pt[i].x-2,pt[i].y-2,pt[i].x+2,pt[i].y+2); } } dc.SelectObject(pOldPen); MyPen.DeleteObject();}void CTestView::OnLButtonDown(UINT nFlags, CPoint point)//获得屏幕控制点坐标函数{ // TODO: Add your message handler code here and/or call default CView::OnLButtonDown(nFlags, point); if(Flag) { pt[CtrlPoint].x=point.x; pt[CtrlPoint].y=point.y; if(CtrlPoint<N_MAX_POINT) CtrlPoint++; else Flag=false; DrawCharPolygon(); }}void CTestView::OnRButtonDown(UINT nFlags, CPoint point)//调用绘制Bezier曲线函数{ // TODO: Add your message handler code here and/or call default Flag=false; DrawBezier(); CView::OnRButtonDown(nFlags, point);}

㈣ 什么软件可以处理关于曲线方面的数据

数据曲线分析器Curve是一款面向科研人员的数据曲线图制作分析软件,可以根据时域序列文件中的数据,生成数据曲线,并对曲线和数据进行分析和处理,该软件具有曲线绘制速度快且精确、频谱分析数据精准的特点,完全可用于精密测量。
数据曲线分析器Curve使用方法
1、导入、导出数据
单击"导入数据"按钮,可从文件导入数据序列,初始数据为"曲线一",对初始数据变换后生成二级曲线"曲线二",对"曲线二"变换后称"曲线三",三条曲线在同一坐标系下以不同颜色显示;变换后的数据被存储在各自的内存缓冲区中,不影响其前级数据。
2、源文件格式数据文件为文本文件,可以单列或多列形式存储;各行应整齐,即每行列数相同,列间以空格或Tab分隔,多个连续空格或Tab被视为1个;对每个数据的字符个数不限制(即每行长度可以不齐),每行列数相同即可;系统会根据设定的列号提取一列数据作为初始数据(首列列号为1),提取时会忽略掉不被提取的其它列,仅读取指定列,因而其它列可以是任意字符,提取列则要求为数值形式;数值无论是否带小数点,都被视为double,合法的数值为C正则"%lf"字符串格式,例如:+69352,618,0,-4,1.7,-87.1899,2.3E-6 等;文件被导入时系统会自动预览显示,可根据预览自行设定参数。
3、曲线算法
曲线算法是指生成曲线数据时使用的方法,对于"初始曲线",只能从文件中导入数据(也可以进程通信直接内存交换,已保留该接口);对二级、三级曲线的数据,则由其前级曲线经过算法运算得到;每次点击算法列表中的选项时,对应的曲线数据生成一次,反复改变算法只影响本级的结果,不影响其前级曲线;算法改变时,用前级数据重新运算一次,而不是在本级原有结果的基础上再叠加算法;变换后的曲线数据可执行"导出数据"被保存至新的文本文件中;导出时可以指定数据选项以及是否以.csv格式存储(该格式可被Excel识别)。

4、多列数据查看
三条曲线中只有"初始数据"是从文件中导入的,另外两条均是在内存中变换生成的;如果数据文件中包含多列数据,想同时对比观察,可逐条导入后,利用变换算法中的"复制前级"将曲线移至二三级缓冲区,然后再导入另一列,这样,曲线窗中即可以对比同一数据

㈤ 请教:如何用c语言画曲线

最简单的办法是对区域均匀划分,计算各点的函数值,然后把这些点用直线连接起来。例如,下面是绘制正弦曲线:
moveto(0, 100);
for (i=0; i<=100;i++)
lineto(i, 100 + 100 *sin(M_PI * 2/100.0*i));

但是用直线连接起来不够平滑,也有一些插值方法进行改进。比如采用不等间隔划分区域,或把曲线使用一段段的二次、三次曲线连接起来。你可以参考清华大学出版社出版的《C语言常用算法程序集》

㈥ AS3 画曲线的算法 带锚点 可以拖动改变曲线轨迹


http://bbs.9ria.com/thread-71904-1-1.html

㈦ matlab绘制积分曲线

你给的信息有点少,matlab中的积分用int,如果你给的式子无法积出解析表达式,就得考虑用数值方法进行积分了,你可以参考数值计算中的一些积分算法进行编程,然后绘制曲线。

㈧ 采用c语言绘制任意函数曲线(双曲线,二次函数,一次函数)怎么做

在c的标准库中有graphic.h头文件,实现了很多画图函数 比如 lineto, moveto, arc,(函数名可能记错,好久没用了-.-!)
直线:起点加终点就行。
二次曲线,比如抛物线,那就以定长拆分成小直线。双曲线同理。
抛物线,和双曲线用定长拆分,估计很难计算。要是精度要求不高就根据情况改成定x,或者定y偏移的拆分,要是精度要求高那就去找直线拟合曲线的算法或者双圆弧拟合曲线的算法。

㈨ vb画5点曲线算法

……很费劲,拉格朗日、阿基玛、牛顿,好多种算法
我给个拉格朗日的吧,以前写过

1年前的我写变量名怎么这么长

Dim testArr() As Long '如果原数据不是Long型,就把这里所有的Long和&改成其他的类型

Private Sub Form_Load()
TestPrint testArr, "原数组"
aLagrange testArr
TestPrint testArr, "拉格朗日"
End Sub

Sub TestPrint(prArr() As Long, Optional ByVal Description As String)
'用于调试的函数
Debug.Print Description
For i = LBound(prArr) To UBound(prArr)
Debug.Print prArr(i);
Next i
Debug.Print
End Sub

Sub aLagrange(ByRef odArr() As Long)
Dim LodArr&, UodArr&, NUodArr&, chgArr() As Long, i&
LodArr = LBound(odArr)
UodArr = UBound(odArr)
NUodArr = 2 * UodArr - LodArr
ReDim chgArr(LodArr To UodArr)
For i = LodArr To UodArr
chgArr(i) = odArr(i)
Next i
ReDim Preserve odArr(LodArr To NUodArr) As Long
odArr(LodArr) = chgArr(LodArr)
odArr(LodArr + 2) = chgArr(LodArr + 1)
For i = LodArr + 4 To NUodArr Step 2
odArr(i) = chgArr((i - LodArr) / 2 + LodArr)
odArr(i - 3) = 0.375 * odArr(i - 4) + 0.75 * odArr(i - 2) + 0.125 * odArr(i)
Next i
odArr(NUodArr - 1) = 0.125 * odArr(NUodArr - 4) + 0.75 * odArr(NUodArr - 2) + 0.375 * odArr(NUodArr)
End Sub

㈩ 如何利用扫频绘制主系统的幅频曲线

方法如下:
1.算法原理:动态扫描曲线绘制的基本原理:先对整个屏幕进清屏操作,然后根据曲线的显示范围进行坐标轴的绘制,最后在绘图区域进行曲线的绘制,当曲线绘制到满屏后进行曲线的擦除和重新绘制操作。最后使用定时器实现不断刷新屏幕,达到动态扫描效果。
2.曲线绘制流程:
步骤1:根据图形界面显示的需求,采用QRect类建立曲线绘制区域,并与使用QBrush类对绘图区域的背景进行填充。
步骤2:根据设计的需求绘制相应的坐标轴,并通过计算绘制出坐标轴的刻度。
步骤3:定义绘制曲线的画笔QPen和数据存储容器,用来进行绘制曲线和存储绘制的数据。
步骤4:计算数据的长度,进行动态扫描曲线数据的加载。
步骤5:启动定时器:Timer—start。
步骤6:进行屏幕刷新操作。
步骤7:开始动态扫描曲线的绘制。
步骤8:不断调用屏幕刷新函数,曲线逐点绘制。
步骤9:不断刷屏实现曲线的擦除和重绘操作。
3.改进的动态扫面曲线绘制算法.改进的算法是在原有Qt开发环境基础上**加载Qwt扩展控件库,然后利用Qwt控件库中曲线绘制函数和对数据进行加载与裁剪的方式进行动态扫描曲线的绘制。当数据加载完成时开始进行数据裁剪操作,数据裁剪是对加载完成的数据从头开始逐个进行删除,同时保证存储位置不变。
最后,将经过加载与剪裁的动态数组加载。

热点内容
视频软件源码 发布:2024-05-18 22:22:24 浏览:428
安卓换苹果sim卡去哪里换 发布:2024-05-18 22:21:29 浏览:636
顺丰薪资默认密码是多少 发布:2024-05-18 22:15:04 浏览:790
浏览器打不开服务器通信怎么办 发布:2024-05-18 21:32:22 浏览:961
创建存储空间 发布:2024-05-18 21:20:57 浏览:122
sql日期和时间 发布:2024-05-18 21:16:19 浏览:143
安卓网页怎么截取 发布:2024-05-18 20:53:56 浏览:972
在配置更新的时候没电关机怎么办 发布:2024-05-18 20:36:10 浏览:928
win7访问win2000 发布:2024-05-18 20:27:41 浏览:389
青岛人社局密码多少 发布:2024-05-18 20:19:10 浏览:735