Zyava
Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору class rect { private: double x1, x2, y1, y2; public: rect() { x1 = x2 = y1 = y2 = 0; } setRect(double tx1, double ty1, double tx2, double ty2) { x1 = tx1; x2 = tx2; y1 = ty1; y2 = ty2; } double getS() { return 1 / 2.0 * ( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ); // S = 1/2 d^2 } double getP() { return 4*sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) )/sqrt(2); } void translate( double diff_X, double diff_Y) { x1 += diff_X; x2 += diff_X; y1 += diff_Y; y2 += diff_Y; } void rotate (double tx, double ty, double angle) { // перемещаем систему иак, чтобы точка вращения была началом координат double tmp_x = x1 - tx; double tmp_y = y1 - ty; // вращаем x1 = tmp_x * cos(angle) - tmp_y * sin(angle); y1 = tmp_x * sin(angle) + tmp_y * cos(angle); // возвращаем назад x1 += tx; y1 += ty; // перемещаем систему иак, чтобы точка вращения была началом координат tmp_x = x2 - tx; tmp_y = y2 - ty; // вращаем x2 = tmp_x * cos(angle) - tmp_y * sin(angle); y2 = tmp_x * sin(angle) + tmp_y * cos(angle); // возвращаем назад x2 += tx; y2 += ty; } void scale (double tx, double ty, double Nscale) { // перемещаем систему иак, чтобы точка вращения была началом координат double tmp_x = x1 - tx; double tmp_y = y1 - ty; // масштабируем x1 = tmp_x * Nscale; y1 = tmp_y * Nscale; // возвращаем назад x1 += tx; y1 += ty; // перемещаем систему иак, чтобы точка вращения была началом координат double tmp_x = x2 - tx; double tmp_y = y2 - ty; // масштабируем x2 = tmp_x * Nscale; y2 = tmp_y * Nscale; // возвращаем назад x2 += tx; y2 += ty; } }; |