سؤال

لدي مستطيل ، والذي كان لديه معلومات حول 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top