Struct的問題 麻煩高手解答一下 |
|
033614477
一般會員 發表:10 回覆:8 積分:3 註冊:2006-11-29 發送簡訊給我 |
請問一下 當我編輯一個struct 資料型態如下
struct CircleCenter //專存取有關圓形或是橢圓中心點(x,y) 半徑(y) 或長短軸(a b)等資訊 { double x , y , r , a , b ; double point_X[4] , point_Y[4]; //存放橢圓四端點座標 }; 然後有個副函數如下 可是他會出現錯誤訊息Structure required on left side of . or .* 但是我有設定CircleCenter啦 是我哪邊沒設定好 還是我語法有錯 麻煩各位大大幫忙一下 我看錯誤訊息還是不知道哪邊出錯 void TForm2::LeastSquareRegression (int TotalBlobs , struct CircleCenter* OriginCircualCenter ,struct CircleCenter* NewCircualCenter , bool judge) { int n = sqrt(TotalBlobs); int nn = n/2; double total_N = TotalBlobs/2; //圓形總數的一半 double Sum_X = 0 , Sum_Y = 0 , Sum_XY = 0 , Sum_X_2 = 0; double temp = 0; int StartPoint = ceil(total_N) - nn; int EndPoint = ceil(total_N) nn 1; if(judge == true) { Center_X = 0.0; Center_Y = 0.0; Angle_NorLine = 0.0; for( int i = StartPoint ; i < EndPoint ; i ) { Sum_X = OriginCircualCenter[i].x; Sum_Y = OriginCircualCenter[i].y; Sum_XY = OriginCircualCenter[i].x*OriginCircualCenter[i].y; Sum_X_2 = mypow(OriginCircualCenter[i].x , 2.0); } temp = 1/(n*Sum_X_2 - mypow(Sum_X , 2.0)); ~!錯誤範圍 LeastSquareData.m = temp*(n*Sum_XY - Sum_X*Sum_Y); LeastSquareData.b = temp*(-Sum_X*Sum_XY Sum_X_2*Sum_Y); LeastSquareData.DirectionAngle = atan(LeastSquareData.m); //得知單位向量的數據 UnitLine.DirectionAngle = LeastSquareData.DirectionAngle; UnitLine.m = LeastSquareData.m; UnitLine.b = sin(UnitLine.DirectionAngle); //得知法線向量的數據 NormalLine.m = -UnitLine.m; NormalLine.DirectionAngle = atan(NormalLine.m); NormalLine.b = NormalLine.m*OriginCircualCenter[StartPoint 1].x - OriginCircualCenter[StartPoint 1].y; ~錯誤範圍 //求得新的座標系統的中心 Center_X = OriginCircualCenter[StartPoint nn].x; Center_Y = OriginCircualCenter[StartPoint nn].y; Angle_NorLine = NormalLine.DirectionAngle; }//if(judge == false) //轉換座標 for(int i = 0 ; i < TotalBlobs ; i ) { double temp_x = OriginCircualCenter[i].x; double temp_y = OriginCircualCenter[i].y; //運算出每一個圓形中心相對於圓形格點中心的相對位置 NewCircualCenter[i].x =(temp_x - Center_X)*cos(Angle_NorLine) - (temp_y - Center_Y)*sin(Angle_NorLine); NewCircualCenter[i].y =-((temp_x - Center_X)*sin(Angle_NorLine) (temp_y- Center_Y)*cos(Angle_NorLine)); } MgraColor(M_DEFAULT , 0L); int XStart_1 = Center_X, YStart_1 = Center_Y, XEnd_1 = Center_X cos(UnitLine.DirectionAngle)*(IMAGE_HEIGHT/2), YEnd_1 = Center_Y UnitLine.b*(IMAGE_HEIGHT/2), XStart_2 = Center_X, YStart_2 = Center_Y, XEnd_2 = Center_X cos(NormalLine.DirectionAngle)*0.85, YEnd_2 = Center_Y NormalLine.b*0.85; MgraLine(M_DEFAULT,MilImage, XStart_1, YStart_1, XEnd_1, YEnd_1); MgraLine(M_DEFAULT,MilImage, XStart_2, YStart_2, XEnd_2, YEnd_2); } |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
傳進來的是指向 struct CircleCenter * 的指標,而非指標陣列 struct CircleCenter **,所以這裡要改成
Sum_X = OriginCircualCenter->x; Sum_Y = OriginCircualCenter->y; Sum_XY = OriginCircualCenter->x * OriginCircualCenter->y; Sum_X_2 = mypow(OriginCircualCenter->x , 2.0); 而OriginCircualCenter[i]的指標陣列我不知道是從哪來的!如果形式參數型態是指標陣列,才有可能是: Sum_X = OriginCircualCenter[i]->x; Sum_Y = OriginCircualCenter[i]->y; Sum_XY = OriginCircualCenter[i]->x*OriginCircualCenter[i]->y; Sum_X_2 = mypow(OriginCircualCenter[i]->x , 2.0); 其他類似程式碼部分請自行檢查! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |