تغيير حجم المستطيل ، من أصول مختلفة
-
20-09-2019 - |
سؤال
لدي مستطيل ، والذي كان لديه معلومات حول Topx ، Topy ، العرض والارتفاع.
أريد توسيع نطاق هذا المستطيل استنادًا إلى أصل غير اليسار. هل هناك بالفعل Algo موجود للقيام بذلك؟
حاليا أعمل على Eclipse GEF & SWT. في GEF ، يُفترض أن جميع عمليات المستطيل جميعها هي حيث يبدأ الرسم ويتم توسيع نطاقه/تغيير حجمه من أعلى اليسار. لكني أريد أن أفعل/تغيير الحجم من الوسط.
على سبيل المثال: المستطيل الخاص بي لديهم معلومات مثل {100،100،50،50}. إذا قمت بتقييم 1.5 في كل من X&Y من أعلى اليسار ، فسأحصل على المستطيل الناتج كـ {100،100،100،100} (أول اثنين هما x ، y والباقي عرض ، ارتفاع).
شكرا ي
المحلول
يختلف تعريف المقياس الخاص بي عنك لأنه إذا قمت بزيادة 1.5 من الجزء العلوي الأيسر ، فسيكون مستطيلتي الناتجة {100 ، 100 ، 75 ، 75} -> يبقى الأصل كما هو ويتم مضاعفة حجم كل جانب بالمقياس .
باستخدام هذه التعريفات ، إذا كانت (x ، y) هي الإحداثيات اليسرى العلوية للمستطيل ، والتوسيع من المركز والحفاظ على أصل الأصل: {x ، y ، العرض ، الارتفاع} -> {x + width * (1 - المقياس)/2 ، y + الارتفاع * (1 - مقياس)/2 ، العرض * المقياس ، الارتفاع * المقياس}
أقترح مقياس> 0 على الرغم من أن النتيجة محددة للقيم الصفر والسلبية.
مثال على العمل: Scale {100 ، 100 ، 50 ، 50} by 1.5 من المركز.
x: 100 -> 100 + 50 * (1 - 1.5)/2 = 100 + 50 * (-0.5)/2 = 100 - 50/4 = 87.5
y: 100 -> 100 + 50 * (1 - 1.5)/2 = 100 + 50 * (-0.5)/2 = 100 - 50/4 = 87.5
width: 50 -> 50 * 1.5 = 75
height: 50 -> 50 * 1.5 = 75
النتيجة: {100 ، 100 ، 50 ، 50} -> {87.5 ، 87.5 ، 75 ، 75}
نصائح أخرى
إذا تم تعريف المستطيل بواسطة
topx, topy, widht, height
عامل التحجيم هو
factor
إحداثيات الأصل
ox, oy
يمكنك توسيع نطاق المستطيل بواسطة الأصل المعطى مع الصيغة التالية
topx = ox + ( topx - ox ) * factor;
topy = oy + ( topy - oy ) * factor;
width = width * factor;
height = height * factor;