當前位置:首頁 » 操作系統 » 繪制曲線演算法

繪制曲線演算法

發布時間: 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-05 18:02:10 瀏覽:335
存儲成本計算 發布:2024-05-05 18:02:10 瀏覽:583
如何把手機改安卓10 發布:2024-05-05 17:39:07 瀏覽:497
我的世界怎麼擴容伺服器內存 發布:2024-05-05 17:19:54 瀏覽:48
java讀取文件字元 發布:2024-05-05 17:15:18 瀏覽:11
三星怎麼應用加密 發布:2024-05-05 17:13:18 瀏覽:152
cad字體在那個文件夾 發布:2024-05-05 17:08:20 瀏覽:331
什麼時候用編譯器 發布:2024-05-05 17:08:20 瀏覽:766
應急救援腳本 發布:2024-05-05 17:08:17 瀏覽:338
我的世界搭建無正版驗證伺服器 發布:2024-05-05 17:03:48 瀏覽:819