新聞中心
高分懸賞 求三維數(shù)據(jù)點(diǎn)C語言插值計(jì)算程序
問題補(bǔ)充,因字?jǐn)?shù)限制,挪到這
創(chuàng)新互聯(lián)公司一直通過網(wǎng)站建設(shè)和網(wǎng)站營(yíng)銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、移動(dòng)互聯(lián)產(chǎn)品、全網(wǎng)營(yíng)銷推廣服務(wù)為核心業(yè)務(wù)。10余年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡(jiǎn)單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。
1.拉格朗日插值簡(jiǎn)介:
對(duì)給定的n個(gè)插值節(jié)點(diǎn)x1,x2,…,xn,及其對(duì)應(yīng)的函數(shù)值y1=f(x1), y2=f(x2),…, yn=f(xn);使用拉格朗日插值公式,計(jì)算在x點(diǎn)處的對(duì)應(yīng)的函數(shù)值f(x);
2.一維拉格朗日插值c語言程序:
Int lagrange(x0, y0, n, x, y)
Float xo[], yo[], x;
Int n;
Float *y
{
Int i, j;
Float p;
*y=0;
If (n1)
{
For(i=0;in;i++)
{
P=1;
For(j=1;jn;j++)
{
If(i!=J)
P=p*(x-x0[j]/x0[i]-x0[j]);
}
*y=*y+p*y0[i];
Return(0);
}
Else
Return(-1);
}
3.例題。已知函數(shù)如下表所示,求x=0.472處的函數(shù)值:
X 0.46 0.47 0.48 0.49
Y 0.484655 0.4903745 0.502750 0.511668
計(jì)算這個(gè)問題的c語言程序如下:
#minclude stdio
#includeMnath.h
Main()
{
Float x0[4]={ 0.46, 0.47,0.48,0.49};
Float y0[4]={ 0.484655 ,0.4903745 ,0.502750 ,0.511668};
Float x, y;
Int n, rtn;
N=4;
X=0.472;
Rth=lagrange(x0,y0,n,x,y);
If(rtn=0)
{
Prinf(“Y(0.472)=:%f\n”,y);
}
Else
{
Prinf(“n must be larger than 1.\n”);
}
}
計(jì)算結(jié)果:Y(0.472)=:0.495553
4.問題補(bǔ)充
我的問題與上面的例子類似,計(jì)算三維空間一點(diǎn)(x,y,z)對(duì)應(yīng)的函數(shù)值(Vx,Vy,Vz).不同的是自變量(point_coordinate.txt)為三維空間散亂點(diǎn)(不是正方體的頂點(diǎn)),因變量(point_data.txt)為矢量(向量 )。插值算法比較多,常數(shù)法,拉格朗日插值,埃特金插值,三階樣條插值等。最簡(jiǎn)單的就是常數(shù)法,查找離目標(biāo)點(diǎn)(x,y,z)距離最近的已知自變量(Xi,Yi,Zi),把該點(diǎn)的函數(shù)值賦給目標(biāo)點(diǎn)做函數(shù)值,求高手幫忙寫寫。
c語言 函數(shù)名: bar3d 怎么用?
bar3d是Turbo C工具中繪制長(zhǎng)方體(也可理解為繪制三維條形圖)的一個(gè)圖形函數(shù)。其基本語法如下:
bar3d(int left, int top, int right, int bottom, int depth, int topflag);
其中:int left, int top構(gòu)成第一個(gè)坐標(biāo)點(diǎn),即屏幕中長(zhǎng)方體前面(即離我們最近的長(zhǎng)方形)左上角的一個(gè)點(diǎn);
int right, int bottom構(gòu)成第二個(gè)坐標(biāo)點(diǎn),即屏幕中長(zhǎng)方體前面(即離我們最近的長(zhǎng)方形)右下角的一個(gè)點(diǎn);
由以上兩個(gè)坐標(biāo)點(diǎn)就可以確定一個(gè)長(zhǎng)方形,然后結(jié)合int depth(用于確定長(zhǎng)方體的厚度,即長(zhǎng)方體前后兩個(gè)面的間距),就可以完全確定長(zhǎng)方體的形狀。
int topflag 用于對(duì)長(zhǎng)方體的頂部顯示方式。
舉例:例如在Turbo C++工具中編寫的C程序:
# include graphics.h
# include stdio.h
void main()
{
int graphdriver=DETECT, graphmode;
initgraph(graphdriver,graphmode,"C:\\TURBOC3\\BGI");? ?//*圖形系統(tǒng)初始化*/
bar3d(0,0,250,250,10,1);
getch() ;
closegraph(); // 關(guān)閉圖形模式//
}
其運(yùn)行結(jié)果為:
運(yùn)行結(jié)果
C++三維數(shù)組函數(shù)
今天,一個(gè)學(xué)徒向我提出了問題,說是不管他怎么理解,對(duì)于多維數(shù)組和多維指針還是不太明白,嗯,耐心的講解了一番……還好不負(fù)所望,他聽懂了,不然的話,咱這塊老臉可就丟大了:),整理了一下,把今天講給他聽的放到網(wǎng)上來,供遇到同樣問題的朋友參考,有理解錯(cuò)誤的地方,還請(qǐng)各位高手指點(diǎn)。首先C++為矩形數(shù)組,意味著 int[2][3] 等于 int[6],int[2][3][4] 等于 int[24] 那為什么還需要多維數(shù)組?一維數(shù)組完全能完成多維數(shù)組的功能啊。原因是,這是為了方便算法的科學(xué)計(jì)數(shù)吧。就像一千萬可以表示為:1000000 也可以表示為 0.1X10的8次方。int a[2] 這是一個(gè)一維數(shù)組,int *p=a,p是指向這個(gè)數(shù)組的指針。a存儲(chǔ)的是這個(gè)數(shù)組內(nèi)存的首地址,也就是說 a 等于 p 等于 數(shù)組內(nèi)存首地址,所以,a[0] 的值等于 *p 等于 首個(gè)元素的值。思考,如果現(xiàn)在需要擴(kuò)充這個(gè)數(shù)組怎么辦呢?我們知道,一維數(shù)組a存儲(chǔ)的是數(shù)組內(nèi)存的首地址(a[0],a[1] 才是數(shù)組元素的值),那如果把 a[0] 的值換成另一個(gè)數(shù)組的內(nèi)存首址,那不是就可以擴(kuò)充這個(gè)數(shù)組了嗎(前面說過C/C++用的是矩形數(shù)組,意味著,如果數(shù)組a里的任何元素存儲(chǔ)了另一個(gè)數(shù)組的首地址,那么其它元素的存儲(chǔ)值也必需是內(nèi)存首地址)?假設(shè),又定義了兩個(gè)數(shù)組 : int aa[3],ab[3] 把 aa 首地址給a[0] ,把 ab 首地址給 a[1] ,這就形成了“數(shù)組的數(shù)組” ,即:一個(gè)數(shù)組內(nèi)的元素值是了另一個(gè)數(shù)組的內(nèi)存首地址,定義方法:int a[2][3],表示:我定義了一個(gè)數(shù)組,有兩個(gè)元素,而每個(gè)元素的值,存儲(chǔ)的是另一個(gè) 包含三個(gè)元素的 數(shù)組內(nèi)存首地址。要怎么使用?首先,如果要訪問上面假設(shè)的aa[0] 那么使用 a[0][0] ,要訪問 ab[0] 使用 a[1][0] ,好了,下標(biāo)訪問解決了,那這就行了嗎?不行,還有指針啊,一維數(shù)指可以用指針來操作,那二維數(shù)組呢?當(dāng)然也可以……int a[2] ,是一個(gè)一維數(shù)組,它存儲(chǔ)了兩個(gè) int 型。每個(gè) int 型 使用 sizeof(int) 得出,占用四個(gè)字節(jié)。那么 sizeof(a[0]) 等于4 ,sizeof(a)等于 sizeof(a[0]) 乘以 2 等于 8。也就是說,使用 int 指針,偏移兩次(每次4字節(jié)),就可以操作這個(gè)數(shù)組的值。而在 int a[2][3] 里,a[0] 還是占用4字節(jié)嗎?當(dāng)然不是,前面說過,它的每個(gè)元素包含了另外一個(gè)數(shù)組,這時(shí)候的 a[0] 占用了 sizeof (a[0]) 等于 int (4字節(jié)) 乘以 3 等于 12字節(jié)……使用 int 型指針 每次++只能偏移 4 個(gè)字節(jié),而我們現(xiàn)在需要的是 從 a[0] 偏移到 a[1] --12個(gè)字節(jié),那怎么辦? int(4字節(jié)) 乘以 3,所以定義 int (*p)[3],注意這里,不是使用 int *p[3],而是使用int (*p)[3],為什么要個(gè)括號(hào)?因?yàn)?,int *p[3],定義的是一個(gè)指針數(shù)組,它可以這么用:int a,b,c,*p[3]; p[0]=a;p[1]=b;p[2]=c,那么我們p[n]實(shí)施++操作的時(shí)候,它一樣的只是偏移4個(gè)字節(jié)。而 int (*p)[3],就不同了,它是一個(gè)數(shù)組指針,每次對(duì)它進(jìn)行++操作時(shí),它正確的偏移了12個(gè)字節(jié)。好了,現(xiàn)在可以這么使用指針了,int a[2][3],(*p)[3];p=a;p++; 可以從a[0]偏移到a[1]了,但是,要取得a[0][0]的值怎么辦呢?前面說過,這個(gè)a是數(shù)組的數(shù)組,意味著a[0] 值是另一個(gè)數(shù)組的首地址,所以我們可以使用 int 型指針,來把 a[0] 當(dāng)做一個(gè)一維數(shù)組來操作了。int *pp;pp=*p(注意,是pp=*p,而不是pp=p ,p的值是這個(gè)二維數(shù)組a的首地址,*p的值就是a[0]的值,存儲(chǔ)的是 包含三個(gè)元素的 數(shù)組首地址。)那么,pp++,int 型 偏移 4 字節(jié) ,能正常讀取了,順理成章~~~:)那如果int [2][3][4]呢?不說啦,思路延伸一下就行了。
用C語言,動(dòng)態(tài)三維數(shù)組
1、先說二維,可以這么理解:
int n[3]有3個(gè)int
那么,
int m[5][3]有5個(gè)int[3]
賦值時(shí):
n[1]=3把3給1號(hào)
m[4]={5,9,4}m[4]是個(gè)int[3]類型,這么賦值,也就是這么賦值:
m[4]的[0]是5:m[4][0]=5
m[4][1]=9
m[4][2]=4
懂了嗎?三維甚至更多維大同小異,比如
int k[4][5][3]有4個(gè)int[5][3]
2、例程:
int***?CreateGrid(int?m,int?n,int?t)
{
int***?tt?=?NULL;?
tt?=?(int***)malloc(sizeof(int)*m);
for(int?i=0;im;i++)
{
tt[i]?=?(int**)malloc(sizeof(int)*n);;
for?(int?k=0;kn;k++)
{
tt[i][k]?=?(int*)malloc(sizeof(int)*t);
}
}
return?tt;
}
void?FreeGrid(int***?tt,int?m,int?n,int?t)
{
if(tt?!=?NULL)
{
for(int?i=0;im;i++)
{
for?(int?j=0;jn;j++)
{
free((tt[i][j]));
}
free(tt[i]);
}
free(tt);
tt?=?NULL;
}
}
網(wǎng)站題目:三維函數(shù)c語言大全 c語言畫三維圖
瀏覽地址:http://fisionsoft.com.cn/article/dodgsgo.html