كيف يمكنني "أفضل ملاءمة" مسار القاهرة التعسفية (Pycairo)؟
سؤال
يبدو أن المعلومات في stroke_extents()
و ال translate(x, y)
و scale(x, y)
الوظائف ، يجب أن أكون قادرًا على اتخاذ أي مسار القاهرة التعسفية (أنا أستخدم Pycairo) و "أفضل ملاءمة". وبعبارة أخرى ، قم بتوسيعها وتوسيعها لملء المساحة المتاحة.
قبل رسم المسار ، قمت بتوسيع نطاق القماش بحيث يكون الأصل هو الزاوية السفلية اليسرى ، أعلى y+، اليمين هو x+، والارتفاع والعرض كلاهما 1. بالنظر إلى هذه الشروط ، هذه الرمز يبدو لتوسيع نطاق المسار بشكل صحيح:
# cr is the canvas
extents = cr.stroke_extents()
x_size = abs(extents[0]) + abs(extents[2])
y_size = abs(extents[1]) + abs(extents[3])
cr.scale(1.0 / x_size, 1.0 / y_size)
لا أستطيع لحياة لي معرفة الترجمة رغم ذلك. هل هناك نهج أبسط؟ كيف يمكنني "تناسب" مسار القاهرة على قماشها؟
يرجى طرح التوضيح إذا كان أي شيء غير واضح في هذا السؤال.
المحلول
لقد وجدت حلاً أحبه (على الأقل لأغراضي). فقط قم بإنشاء سطح جديد ورسم السطح القديم على السطح الجديد.
نصائح أخرى
أما بالنسبة للمقياس فقط ، فقد فعلت شيئًا مشابهًا لضبط صورة داخل مربع مع نهج "أفضل ملاءمة". كما هو الحال في المقياس ، إليك الرمز:
available_width = 800
available_height = 600
path_width = 500
figure_height = 700
# formulas
width_ratio = float(available_width)/path_width
height_ratio = float(available_height)/figure_height
scale = min(height_ratio, width_ratio)
# result
new_path_width = path_width*scale
new_figure_height = figure_height*scale
print new_path_width, new_figure_height
يتم رسم الصورة محاذاة مع الأصل (أعلى اليسار في حالتي) ، لذلك ربما ينبغي القيام شيء مشابه لترجمة المسار.
أيضا ، هذا أفضل ملاءمة تهدف إلى الحفاظ على نسبة العرض إلى الارتفاع. إذا كنت تريد تمديد الشكل ، فاستخدم كل من النسب بدلاً من متغير "المقياس".
آمل أن أكون قد ساعدت