Qt 用QPainter畫乙個3D的正方體

2021-07-24 19:33:31 字數 1916 閱讀 3919

閒的蛋疼

#define square_length 200//是乙個邊長200的正方體

#define camera_distance 300//視點距離

class

my3dbox : public qwidget

;my3dbox .cpp

#include "widget.h"

#define pi 3.1415926

my3dbox::my3dbox(qwidget *parent) :

qwidget(parent),m_mousepos(0,0)

void my3dbox::mousemoveevent(qmouseevent *e)//此處把座標原點從左上角變換至螢幕中心

void my3dbox::paintevent(qpaintevent *)

//一共要畫5個面,最後畫正面

if(qabs(m_mousepos.x()) > qabs(m_mousepos.y()))

else

}else

else

}//畫正面

qpoint point[4] =

;drawplane(point,painter);

}void my3dbox::drawplane(const qpoint *points,qpainter &painter)

matrix3d my3dbox::getmartix()

matrix3d m_z;

if(unit_x == 0 && unit_y == 0)

m_z << 1,0,0,

0,1,0,

0,0,1;

else

m_z << unit_y,-unit_x,0,

unit_x,unit_y,0,

0,0,1;

matrix3d m_x;

if(z == 0)

m_x << 1,0,0,

0,1,0,

0,0,1;

else

m_x << 1,0,0,

0,cos(z*pi/2.6),sin(z*pi/2.6),

0,-sin(z*pi/2.6),cos(z*pi/2.6);//為什麼pi/2大於90度?因為沒畫背面所以必須小於90度(偷懶)

return m_z.inverse()*m_x*m_z;

}qpoint my3dbox::topoint(vector3d vector)//將3d座標投影至平面上

void my3dbox::drawup(qpoint *points,qpainter &painter)

; drawplane(point,painter);

}void my3dbox::drawdown(qpoint *points,qpainter &painter)

; drawplane(point,painter);

}void my3dbox::drawleft(qpoint *points,qpainter &painter)

; drawplane(point,painter);

}void my3dbox::drawright(qpoint *points,qpainter &painter)

; drawplane(point,painter);

}

用PS畫乙個齒輪

以前只會畫圓畫方,這沒技術含量.今天學了乙個稍難一點的,畫乙個齒輪.圖形有圓也有方.以下描述如何畫出來的.一.開啟ps準備一畫布,畫一矩形並且填充顏色.二.編輯 自由變換 ctrl t 然後按住ctrl shift alt,用滑鼠點選右上角拖動至梯形.三.圖層複製乙個 將需要複製的圖層拖到新建圖層圖...

Effective前端3 用CSS畫乙個三角形

三角形的場景很常見,開啟乙個頁面可以看到各種各樣的三角形 由於div一般是四邊形,要畫個三角形並不是那麼直觀。你可以貼一張png,但是這種辦法有點low,或者是用svg的形式,但是太麻煩。三角形其實可以用css畫出來。如上圖提到,可以分為兩種三角形,一種是純色的三角形,第二種是有邊框色的三角形,先介...

畫乙個空心圓 今天用「 」畫乙個空心的圓

題目描述 1 孟子曾說過 離婁之明 公輸子之巧,不以規矩,不能成方圓 而機房日子的潘老師最近有乙個苦惱,他希望能用手畫出乙個圓,但是他發現,用手畫出的圓始終不夠圓,為此,他決定使用點 規矩 問題分析與演算法設計 2 列印圓可利用圖形的左右對稱性。根據圓的方程 r r x x y y 可以算出圓上每一...