Canvas Transformations

Previous >    <Next  

‎تبديلات دربوم ـCanvas Transformations

‎هنگاميكه در بوم بصورت نرمال ترسيمي انجام ميشود، ترسيم همان است كه درمتد و ويژگي هاي ‎اعمال شده مشاهده ميكنيد .اما ميتوان با استفاده از متدهائي تغييرات در ترسيم مثل ‎مقياس ، مكان، جهت و ... اعمال نمود .دراين صفحه متدهاي تبديلي بوم كه مربوط مي ‎باشند ، تشريح ميگردد.

‎جدول متدهاي تبديلي دربوم همراه لينك داخلي وتشريح آنها در زير آمده است.

‎متد ‎شرح
scale() ‎ترسيم فعلي را بزرگتر يا كوچكتر مبكند
rotate() ‎ترسيم فعلي را مي چرخاند.
translate() ‎موقعيت‎(0,0)‎ روي بوم را دوباره ترسيم ميكند .
transform() ‎جانشين ميكند ماتريس فعلي تبديل را براي ترسيم.
setTransform() ‎ماتريس تبديل با اين متد بازنشاني‎(reset)‎ ميشود .
‎اين ماتريس مبناي شروع ويا ادامه است.

‎متدCanvas scale()‎

‎متد‎scale()‎‎ براي شئ زمينه دوبعدي‎(context)‎ مقياس ترسيم برقرار ‎ميكند .درصورتيكه براي شئ مقياس اعلام نشود همان مقياس عادي يعني‎scale(1,1)‎ ‎بدون تبديلي اعمال ميشود.

‎مثال ـ مستطيلي با مقياس معمول ترسيم ودوباره بامقياس‎200%‎ رسم ميشود .

const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.strokeRect(5, 5, 25, 15);
ctx.scale(2, 2);
ctx.strokeRect(5, 5, 25, 15);

--(go to editor for change code and run)

‎مستطيل اول كه با‎ctx.dtrokeRec(5,5,25,15)‎ ومقياس نرمال‎100%‎ ‎رسم ميشود، بامقياس‎200%‎ مختصات متد دوبرابر وترسيم ميگردد .يعني مستطيل دوم با ‎مقياس نرمال‎ctx.strokeRect(10,10,50,30)‎خواهد بود.

‎نكته ـ اگر يك شئ زمينه‎(‎context‎)‎ را با مقياسي تنظيم كنيد، تمام ترسيم ‎بعدي متاثر ازآن مقياس ميشود.

‎فرمت استفاده ـSyntax

<;>contxt.scale(scalwidth,scaleheight)

‎مقادير پارامتر ـparameter Values

‎پارامتر ‎شرح
scalewidth ‎مقياس مختصات افقي
1=100% 2=200% 0.5=50%
scaleheight ‎مقياس مختصات عمودي
1=100% 2=200% 0.5=50%

‎مثال ـ مستطيلي ترسيم ميكند .مقياس به‎200%‎ تنظيم ودوباره مستطيلي رسم ميشود. ‎مقياس دوباره به‎200%‎ تنظيم ومستطيل ترسيم ميگردد.اين كار يك بار ديگر هم انجام ‎ميشود.

const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
// scales 100%
ctx.strokeRect(5, 5, 25, 15);
ctx.scale(2, 2); //scales 200%
ctx.strokeRect(5, 5, 25, 15);
ctx.scale(2, 2); //scales 400%
ctx.strokeRect(5, 5, 25, 15);
ctx.scale(2, 2); //scales 800%
ctx.strokeRect(5, 5, 25, 15);

--(go to editor for change code and run)

‎توجه ـ به روند افزايش مقياس در كامنت دستورات مثال توجه كنيد وافزايش مقياس را نسبت به ‎مقياس مبنا درك نمائيد.

‎متدCanvas rotate()‎

‎متد‎rotate()‎‎ ترسيم شئ زمينه‎(‎context‎)‎ مرتبط را چرخش ‎ميدهد.

‎توجه ـ پس از فراخواني روش چرخش، چرخش بر ترسيم هاي بعدي تاثير ميگذارد.

‎مثال ـ مستطيل را بيست در جه چرخش ميدهد.

const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.rotate(20 * Math.PI / 180);
ctx.fillRect(50, 20, 100, 50);

--(go to editor for change code and run)

‎فرمت استفاده ـSyntax

context.rotate(angle)

‎مقادير پارامتر ـParameter Values

‎پارامتر ‎شرح
angle ‎زاويه جرخش ترسيم برحسب راديان
(Radians=degrees*MATH.PI/180)
‎براي چرخش‎5‎ درجه‎5*MATH.PI/180‎ راديان‎(PI=3.14)‎ .

‎متدCanvas translate()‎

‎با متد‎translate()‎‎ نقطه ‎(0,0)‎ شئ زمينه ‎(‎context‎)‎ ‎دوباره ترسيم ميگردد.

‎توجه ـ وقتي يك متد جديد را بعداز‎translate()‎‎ فراخواني ميكنيد، موقعيت جديد به ‎مختصاتx,y اضافه ميشود .

‎مثال ـ مستطيلي در نقطه‎(10,10)‎ ترسيم ميشود .نقطه‎(0,0)‎ بامتد ‎translate(70,70)‎روي‎(70,70)‎ تنظيم ميشود .با ترسيم مجدد ‎مستطيل،ترسيم آن از نقطه‎(80,80)‎ شروع ميشود.

const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.fillRect(10, 10, 100, 50);
ctx.translate(70, 70);
ctx.fillRect(10, 10, 100, 50);

--(go to editor for change code and run)

context.translate(x,y)

‎مقادير پارامتر ـParameter Values

‎پارامتر ‎شرح
x ‎مقداريكه به مختصات افقي نقطه اضافه ميشود.
y ‎مقداريكه به مختصات عمودي نقطه اضافه ميشود.

‎متدCanvas transform()‎

‎متد‎transform()‎‎ شئ زمينه‎(‎context‎)‎ را روي موارد ‎مقياس، چرخش ، انتقال ياحركت، وكجي براي ترسيم تنظيم ميكند.

‎هر شئ در بوم براي ترسيم داراي يك ماتريس تبديل‎(transformation matrix)‎ميباشد.

‎مثال ـ ترسيم مستطيل . يك ماتريس جديد با متد‎transform()‎‎ اضافه ميشود .مستطيل ‎مطابق روال قبلي وماتريس تبديل جاري ترسيم ميشود .مجددا اضافه نمودن ماتريس ورسم مستطيل.

const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.fillStyle = "green";
ctx.fillRect(0, 0, 250, 100)

ctx.transform(1, 0.5, -0.5, 1, 30, 10);
ctx.fillStyle = "red";
ctx.fillRect(0, 0, 250, 100);

ctx.transform(1, 0.5, -0.5, 1, 30, 10);
ctx.fillStyle = "blue";
ctx.fillRect(0, 0, 250, 100);

--(go to editor for change code and run)

‎توجه ـ هر باريكه متد‎transform()‎‎ فراخوان ميشود، ماتريس تبديل براساس ‎ماتريس تبريل قبلي ساخته ميشود.

‎ماتريس تبديلي ايجاد شده روي ترسيم هاي بعدي تاثير ميگذارد.

‎فرمت استفاده ـSyntax

context.transform(a,b,c,d,e,f)

‎مقادير پارامتر ـParameter Values

‎پارامتر ‎شرح
a ‎مقياس افقي ترسيم
b ‎كجي افقي ترسيم
c ‎كجي عمودي ترسيم
d ‎مقياس عمودي ترسيم
e ‎انتقال افقي ترسيم
f ‎انتقال عمودي ترسيم

‎متدCanvas setTransform()‎

‎متد‎settransform()‎‎ زمينه‎(‎contex‎)‎ را براي مقياس، چرخش، حركت ‎و كجي تنظيم ميكند .هر شئ در بوم داراي يك ماتريس تبديل است .متد فوق ماتريس تبديل را ‎به ماتريس هويت‎(identity matrix)‎ بازنشاني ميكند وسپس ‎transform()‎‎ ‎باهمان آرگومان ها اجرا ميكند.

‎مثال ـ مستطيلي ترسيم ميكند .ماتريس تبديل بازنشاني‎(reset)‎ ميشود .دوباره مستطيل ‎كشيده ميشود

const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.fillStyle = "green";
ctx.fillRect(0, 0, 250, 100)

ctx.setTransform(1, 0.5, -0.5, 1, 30, 10);
ctx.fillStyle = "red";
ctx.fillRect(0, 0, 250, 100);

ctx.setTransform(1, 0.5, -0.5, 1, 30, 10);
ctx.fillStyle = "blue";
ctx.fillRect(0, 0, 250, 100);

--(go to editor for change code and run)

‎هرموقعي كه متد‎setTransform()‎‎ فراخواني ميشود، ماتريس تبديل جديدي ساخته ‎ميشود .درمثال بالا مستطيل قرمز پنهان ونمايان نيست، زيرا آن پشت مستطيل سبز قرار دارد.

‎توجه ـ ماتريس تبديل پس از فراخواني متد‎setTransform()‎‎ برترسيم هاي بعدي تاثير ‎ميگذارد.

‎فرمت استفاده ـSyntax

context.setTransform(a,b,c,d,e,f)

‎مقادير پارامتر ـParameter Values

‎پارامتر ‎شرح
a ‎مقياس افقي رامشخص ميكند.
b ‎كجي افقي را مشخص ميكند.
c ‎كجي عمودي را مشخص ميكند.
d ‎مقياس عمودي رامشخص ميكند.
e ‎انتقال افقي را مشخص ميكند.
f ‎انتقال عمودي را مشخص ميكند.

Previous >    <Next