我有我的代碼工作翻譯,唯一的問題是我似乎無法居中它。 我試圖做 「translate = translate * center」,並將它移動到它的右上角。我不確定我還能做什麼。我知道我的矩陣功能正常工作,我在這裏錯過了什麼?2D轉換,C++,旋轉/平移/比例/居中
oid viewContext::calculate() {
std::cout << "calculate" << std::endl;
/*
* reinitialize these values
*/
translated.clear();
translated[0][0] = 1;
translated[1][1] = 1;
translated[2][2] = 1;
//translated = translated * center;
//if translate is called
if (whichMethod == trans) {
translated = translated * center;
translated = translated * S;
translated = translated * T;
}
的,如果在上面的代碼語句是我是想出來的,我知道它的非必要的。
matrix viewContext::model_to_device(const matrix& param) {
std::cout << "model to device" << std::endl;
//matrix hold_values = param;
matrix hold_values = translated * param;
return hold_values;
}
我的翻譯,旋轉等方法看起來像這樣。在這種方式被格式化很好,他們稱之爲計算()在結束
void viewContext::rotator(double degree) {
std::cout << "Rotate" << std::endl;
double theta = ((degree * M_PI)/180);
R[0][0] = cos(theta);
R[0][1] = -1 * sin(theta);
R[1][0] = sin(theta);
R[1][1] = cos(theta);
calculate();
}
viewContext::viewContext() :
translated(3, 3), inverted(3, 3), center(3, 3), T(3, 3), S(3, 3), R(3,
3) {
//clear matrix just incase it isn't empty
//Should be empty but this is precautionary
translated.clear();
inverted.clear();
/*
* Constant values
* echelon form
*/
T[0][0] = 1;
T[1][1] = 1;
T[2][2] = 1;
/*
* Constant values
* 300 = x, 400 = y to put at origin.
*/
center[0][0] = 1;
center[0][2] = width;
center[1][1] = -1;
center[1][2] = height;
center[2][2] = 1;
/*
* Constant values
* Echelon form
*/
S[0][0] = 1;
S[1][1] = 1;
S[2][2] = 1;
//TODO
// /*
// * Constant values
// * Echelon form
// */
translated[0][0] = 1;
translated[1][1] = 1;
translated[2][2] = 1;
/*
* Constant values
* Echelon form
*/
R[0][0] = 1;
R[0][1] = 0;
R[1][0] = 0;
R[1][1] = 1;
R[2][2] = 1;
calculate();
}
那是我的構造,其中中心實施的一部分。
private:
/* translation matrix */
matrix translated;
/* translation inverse matrix */
matrix inverted;
/* to center the image */
matrix center;
matrix T;
matrix S;
matrix R;
const int height = 300;
const int width = 400;
void calculate();
int whichMethod;
};
情況下(KEY_U): 的std :: COUT < < 「鍵按下向下」 < <的std :: ENDL; tY = tY-20; vContext.translation(tX,tY); gc-> clear(); derived→draw(gc,& vContext); 休息;
我不完全確定我會做錯什麼。 我使用鍵盤翻譯(向上,向下箭頭鍵和什麼不是。向左) 完美的作品,但由於我的中心部分已實施,它將移動到右上角,然後開始翻譯。我不確定發生了什麼問題。 任何幫助將不勝感激!
你的問題並沒有提供很多關於你在做什麼的信息,但它看起來像是在均勻座標系中的平移和旋轉的矩陣表示。你在哪裏使用它們? OpenGL的?請記住,使用矩陣時,順序很重要,所以你'翻譯=中心* S * T'首先適用於T,然後S,然後居中,如果你以後計算'翻譯* coordinateVector' – Anedar
@Andar對不起我的其他帖子,有人寫我提供了太多的信息。 我在一個基於Linux的虛擬機上。 center是我的矩陣,它包含您在代碼中看到的內容。T包含已翻譯的座標。 S包括縮放後的座標。 我是否應該在這裏放置代碼部分? 但是,我先居中,然後縮放,然後翻譯。我相信這是實施它的正確方法。 有什麼我失蹤? –
從你發佈的代碼中,'center','R'和'translated'是矩陣。但是S和T是什麼?你期望'model_to_device()'做什麼?你應該提供與你的問題相關的所有信息 - 只有那些相關的信息。 – Anedar