Проблема: когда я изменяю цифру вертикально (т.е., когда высота не будет достигнута, пока не достигнут. Узел «1», кривизна центральной дуги имеет тенденцию «сгладить» или деформировать неестественно, иногда даже с «горбами» или нереалистичными прямыми линиями. Если я не выпускаю узел и не масштабируется вверх и вниз, масштабирование нормальное. Я попробовал как простую технику масштабирования, так и реконструкцию, используя квадратичную формулу Bézier, но ни один из них не полностью не избегает общего сглаживания или «горба» на кривую.
Код: Выделить всё
if (dynamic_cast(&polygon) != nullptr && originalPoints_.size() == 3) {
// Scale the endpoints normally.
POINT p0, p2;
p0.x = static_cast(anchor_.x + (originalPoints_[0].x - anchor_.x) * scaleX_);
p0.y = static_cast(anchor_.y + (originalPoints_[0].y - anchor_.y) * scaleY_);
p2.x = static_cast(anchor_.x + (originalPoints_[2].x - anchor_.x) * scaleX_);
p2.y = static_cast(anchor_.y + (originalPoints_[2].y - anchor_.y) * scaleY_);
// Base vector and normal
double dx = originalPoints_[2].x - originalPoints_[0].x;
double dy = originalPoints_[2].y - originalPoints_[0].y;
double length = std::sqrt(dx * dx + dy * dy);
double nx = -dy / length;
double ny = dx / length;
// Center of the original and scaled base
double cx0 = (originalPoints_[0].x + originalPoints_[2].x) * 0.5;
double cy0 = (originalPoints_[0].y + originalPoints_[2].y) * 0.5;
double cx = (p0.x + p2.x) * 0.5;
double cy = (p0.y + p2.y) * 0.5;
// Perpendicular distance from the original control
double px = originalPoints_[1].x - cx0;
double py = originalPoints_[1].y - cy0;
double signedDist = px * nx + py * ny;
// Minimum curvature option
double distEscalada = signedDist * scaleY_;
const double minDist = 8.0; // I try to avoid complete flattening.
if (fabs(distEscalada) < minDist)
distEscalada = (distEscalada >= 0) ? minDist : -minDist;
POINT p1;
p1.x = static_cast(cx + nx * distEscalada);
p1.y = static_cast(cy + ny * distEscalada);
newPts.clear();
newPts.push_back(p0);
newPts.push_back(p1);
newPts.push_back(p2);
}
Пример изображения
Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-when-re