رنگ Color

آخرین به روزرسانی در 31 خرداد 1402
نوشته شده توسط علی خادم
رنگ

توی دنیای دیجیتال، وقتی داریم درباره رنگ صحبت می‌کنیم باید دقیق باشیم. مثلاً این که بگیم اون دایره رو برام سرخابی کن فایده‌ای نداره. هر رنگی با استفاده از مجموعه‌ای از اعداد مشخص و متمایز می‌شه. مثلاً عدد 0 یعنی سیاه و 255 یعنی سفید. تا حالا رنگ‌های مختلفی توی اسکیس‌ها استفاده کردیم، الان می‌خوایم ببینیم چطور می‌تونیم رنگ‌ها رو کنترل کنیم و رنگی که نیاز داریمو بسازیم.

تابع رنگ

p5.js به صورت پیش‌فرض از سیستم RGB برای کار کردن با رنگ‌ها استفاده می‌کنه. RGB مخفف این کلماته:

  • R ـ Red ـ قرمز
  • G ـ Green ـ سبز
  • B ـ Blue ـ آبی

رنگ مورد نظرمونو باید از ترکیب این سه عدد به دست بیاریم؛ هر کدوم از این سه عدد می‌تونن مقداری بین 0 و 255 داشته باشن. مثلاً اگه برای تابع background پارامترهای 0, 0, 0 رو استفاده کنیم نتیجه اینه که سیاه به دست آوردیم و اگه 255, 255, 255 استفاده کنیم، پس‌زمینه‌مون سفید می‌شه. البته اگه مثل این دو تا سناریو قرار باشه هر سه تا عدد یکی باشن، فقط کافیه یکی از اعداد رو وارد کنید؛ یعنی به جای 255, 255, 255 فقط کافیه بنویسیم 255 و رنگ سفید رو بسازیم. دقت کنید وقتایی که فقط از یه پارامتر استفاده می‌کنید، یعنی هر سه تا مقدار RGB یک‌سان هستن، رنگ شما فقط می‌تونه سیاه یا سفید یا خاکستریِ تیره یا روشن باشه. اگه نیاز به غلظت‌های متنوع رنگی داشته باشید باید از هر سه پارامتر استفاده کنید.

255 بیشترین غلظتیه که یه رنگ می‌تونه داشته باشه. پس اگه پارامتر‌های 255, 0, 0 رو استفاده کنیم، یه رنگ کاملاً قرمز به دست میاریم، اگه از 0, 255, 0 استفاده کنیم، کاملاً سبز به دست میاریم و اگه از 0, 0, 255 استفاده کنیم، کاملاً آبی.

من معمولاً برای ساختن پالت مورد نیازم و همچنین به دست آوردن کد RGB از یه ابزار آنلاینی که توی این آدرس هست استفاده می‌کنم: https://coolors.co؛ پیشنهاد می‌کنم حتماً یه سری به این سایت بزنید و با امکاناتی که داره آشنا بشید.

یک پالت

پارامترِ چهارم

هر جایی که سه تا پارامتر RGB رو وارد می‌کنید، می‌تونید یه پارامتر چهارم هم وارد کنید؛ به این پارامتر چهارم می‌گن پارامترِ آلفا و برای همین بعضی جاها این استاندارد رو RGBA نام‌گذاری کردن. پارامترِ آلفا، میزان کدورت یا شفافیتِ رنگو مشخص می‌کنه و باز هم می‌تونه عددی بین 0 تا 255 باشه؛ در این صورت 0 یعنی کاملاً شفاف و 255 یعنی کاملاً کِدِر.

در نتیجه موقع انتخاب رنگ با مدل RGB، می‌تونیم یک مقدار، یا سه مقدار، یا چهار مقدار رو به عنوان پارامتر وارد کنیم و یه رنگ به دست بیاریم. نمی‌خوام با اطلاعات خیلی زیاد گیجتون کنم، ولی گوشه ذهنتون این رو هم نگه دارید که موقع استفاده کردن از این مدل می‌تونید فقط دو تا پارامتر هم وارد کنید؛ در این صورت پارامتر اول مشخص کننده‌ی رنگ‌های RGB خواهد بود و پارامتر دوم، مقدارِ آلفا.

خب حالا می‌دونید اعدادی که به عنوان پارامتر توی تابع‌هایی مثل background و fill و stroke استفاده کردیم معنی‌شون چیه. یادآوری می‌کنم که برای رنگ دادن به یه شکل از تابع fill و برای رنگ دادن به دورخطِ یه شکل از تابع stroke استفاده می‌کنیم. رنگ پیش‌فرض همه شکل‌ها توی p5.js سفید و دورخط همه شکل‌های به صورت پیش‌فرض سیاهه؛ یه تابع مفید دیگه هم که خوبه همین جا یاد بگیرید strokeWeight هست که اجازه می‌ده ضخامت دورخط رو مشخص کنید:

function setup() {
     createCanvas(windowWidth, windowHeight);
}
function draw() {
     background(210)

     // circle 1
     fill(50, 50, 50)
     strokeWeight(3)
     stroke(75)
     ellipse(windowWidth/2, windowHeight/2, 300, 300)

     // circle 2
     fill(255, 50, 100)
     stroke(0)
     ellipse(windowWidth/2, windowHeight/2, 270, 270)

     // circle 3
     fill(1, 175, 240)
     ellipse(windowWidth/2, windowHeight/2, 240, 240)

}
چند دایره که روی هم قرار گرفته اند

توی مثال بالا از تابع fill قبل از کشیدن هر دایره استفاده کردم تا رنگ دایره‌ای که داره کشیده می‌شه رو مشخص کنم؛ دو تا تابع دیگه به نام‌های noFill و noStroke هستن که همون طوری که از اسمشون به پیداس وقتایی استفاده می‌شن که برای شکل به رنگ نیاز نداشته باشیم یا بخوایم شکل دورخط نداشته باشه.

مَپ کردن

توی درس قبلی دیدید که برنامه‌مون می‌تونه اطلاعاتی رو از موقعیتِ مکان‌نمای ماوس روی صفحه به دست بیاره. عددایی که توسط مکان‌نمای ماوس به دست میاد معمولاً باید یه تغییراتی روشون انجام بشه تا داخل برنامه‌ای که داریم می‌نویسیم قابل استفاده باشن. مثلاً فرض کنید عرض یه اسکیس 1920 پیکسل باشه و بخوایم از مکان‌نمای ماوس استفاده کنیم برای تغییر دادن رنگ پس‌زمینه؛ توی این درس هم یاد گرفتید که عددی که نیاز داریم باید بین 0 تا 225 قرار بگیره تا بتونیم رنگ‌ها رو باهاش کنترل کنیم؛ این جاس که باید از تابع map استفاده کنیم و به اصطلاح عددمونو مپ کنیم:

function setup() {
     createCanvas(windowWidth, windowHeight)
}
function draw() {
     const mapWidth = map(mouseX, 0, windowWidth, 0, 255)
     const mapHeight = map(mouseY, 0, windowHeight, 0, 255)
     background(mapWidth, mapHeight, 100)
}

توی این اسکیسِ خیلی ساده، از تابع background توی draw استفاده کردم. برای به دست آوردنِ غلظتِ رنگِ قرمز حرکت افقی ماوس رو مپ کردم، برای به دست آوردن غلظت رنگ سبز حرکت عمودی ماوس رو مپ کردم و غلظت رنگ آبی رو عدد ثابت صد قرار دادم.

تابعِ map پنج تا پارامتر داره:

  • اولین پارامتر ـ عددی که قراره مپ بشه
  • دومین پارامتر ـ پایین‌ترین عدد توی بازه فعلی
  • سومین پارامتر ـ بالاترین عدد توی بازه فعلی
  • چهارمین پارامتر ـ پایین‌ترین عدد توی بازه هدف
  • پنجمین پارامتر ـ بالاترین عدد توی بازه هدف
map(value, start1, stop1, start2, stop2)

// value (Number)
// the incoming value to be converted

// start1 (Number)
// lower bound of the value's current range

// stop1 (Number)
// upper bound of the value's current range

// start2 (Number)
// lower bound of the value's target range

// stop2 (Number)
// upper bound of the value's target range

ذخیره کردن رنگ

بعضی وقتا نیاز داریم یه رنگ رو توی یه متغیر ذخیره کنیم و بعداً ازش استفاده کنیم. توی اسکیس بعدی با استفاده از تابع frameRate یه برنامه‌ای می‌نویسم که محتویات draw رو توی هر ثانیه فقط یه بار اجرا کنه (بعداً درباره این بیشتر یاد می‌گیریم). بعد با استفاده از تابع color رنگ‌ها رو توی متغیرها ذخیره می‌‌کنم. در نهایت برنامه، توی هر ثانیه، سه تا رنگ تصادفی درست می‌کنه و روی صفحه نمایش بهم نشون می‌ده:

function setup(){
     createCanvas(windowWidth, windowHeight)
     frameRate(1)
}
  
function draw(){
     background(255)
     noStroke()

     const color1 = color(random(255), random(255), random(255))
     fill(color1)
     rect(0, 0, width/3, height)
    
     const color2 = color(random(255), random(255), random(255))
     fill(color2)
     rect(width * 1/3, 0, width/3, height)
    
     const color3 = color(random(255), random(255), random(255))
     fill(color3)
     rect(width * 2/3, 0, width/3, height)
                         
}
این برنامه هر ثانیه سه رنگ تصادفی درست می کند

ارسال نظر

ایمیل شما منتشر نخواهد شد. بخش‌های ضروری با * مشخص شده‌اند.