شما اینجا هستید

۴-۱ عملیات های ریاضی بیشتر بر روی بردار

پیغام خطا

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls در book_prev() (خط 775 در /home/molavy/public_html/modules/book/book.module).

جمع کردن واقعا قدم اول بود، عملیات های ریاضی بیشتری بر روی بردار ها وجود دارد. در زیر یک لیست از توابع عمومی از عملیات هایی که برای انجام روی کلاس PVector قابل انجام است، آمده. در ادامه تعدادی از توابع کلیدی را بررسی می کنیم. به دلیل اینکه مثال های ما در فصل های بعد بیشتر پیچیده می شوند. جزییات توابع بیشتری آشکار خواهند شد.

Add – جمع بردار ها

sub – تقسیم بردار ها

mult – ضرب یک عدد در یک بردار

div – تقسیم بردار بر یک عدد

mag – محاسبه مقدار یک بردار

setMag – مقدار دهی به اندازه یک بردار

normalize – طبیعی کردن(نرمال کردن) یک بردار به واحدی با اندازه یک(۱)

limit – محدود کردن اندازه یک بردار

heading – نمایش دو بعدی از یک بردار به صورت زاویه

rotate – چرخاندن یک بردار دو بعدی با یک زاویه

lerp – دورن یابی خطی با یک بردار دیگر

dist – فاصله اقلیدسی بین دو بردار( نمایش به صورت نقاط)

angleBetween – پیدا کردن زاویه بین دو بردار

dot – ضرب نقطه ای دو بردار

corss – ضرب خارجی دو بردار

random2D – ایجاد یک بردار دو بعدی تصادفی

random3D – ایجاد یک بردار تصادفی سه بعدی

قبلا جمع بردار را بررسی کردیم، اجازه بدهید با تفریق شروع کنیم. اینطوری بد نیست: تنها جای علامت جمع را با علامت منها عوض کنید


 

تفریق بردار

w⃗ =u⃗ −v⃗

می تواند به شکل زیر نوشته شود:

wx=ux−vx
wy=uy−vy

تصویر ۱-۷ تفریق بردار

و بنابراین تابع داخل PVector شبیه زیر است:

  void sub(PVector v) {
    x = x - v.x;
    y = y - v.y;
  }

نمایش زیر مثالی از تفریق بردار است که با محاسبه اختلاف بین دو نقطه محاسبه شده است-- موقعیت موشواره و وسط پنجره

مثال ۱-۳ تفریق بردار

 void setup() {
  size(640,360);
}
 
void draw() {
  background(255);
  PVector mouse  = new PVector(mouseX,mouseY);
  PVector center = new PVector(width/2,height/2);
  mouse.sub(center);
  translate(width/2,height/2);
  line(0,0,mouse.x,mouse.y);
} 

خصوصیات اعداد ساده با بردار ها

جمع با بردار ها از قواعد یکسان جبری اعداد حقیقی تبعیت می کند.

قاعده جابه جایی : 

u⃗ +v⃗ =v⃗ +u⃗ 

قاعده شرکت پذیری:

u⃗ +(v⃗ +w⃗ )=(u⃗+v⃗)+w⃗

اصطلاحات انتزاعی و نمادهای کنار آن، این مفاهیم خیلی ساده است. ما می خواهیم بگوییم که ویژگی های که ما در جمع عادی داریم بر روی بردار ها هم قابل اعمال هستند.

3+2=2+3
(3+2)+1=3+(2+1)

 

ضرب بردار

حال نوبت ضرب است، ما مجبوریم یک مقدار متفاوت فکر کنیم. وقتی درباره ضرب یک بردار صحبت می کنیم، چیزی که منظورمان است تغییر اندازه یک بردار است. اگر ما بخواهیم یک بردار را دوبرابر اندازه فعلی یا یک سوم اندازه فعلی کنیم(مسیر آن دست نخورده باقی بماند)، ما خواهیم گفت ضرب یک بردار در دو. یا ضرب یک بردار در 1/3. توجه کنید ما ضرب یک بردار در یک عدد اسکالر انجام می دهیم. یک عدد صحیح، نه یک بردار.

برای تغییر اندازه یک بردار، ما هر جزء (x و y) در یک عدد اسکالر ضرب می کنیم.

W⃗ =u⃗ *n

می تواند به شکل زیر نوشته شود:

wx=ux*n
wy=uy*n

اجازه بدهید به مثالی با علائم برداری نگاه کنیم.

تصویر ۱-۸: تغییر اندازه یک بردار

u⃗ =(−3,7)
n=3

w⃗=u⃗ *n
wx=−3*3
wy=7*3

w⃗=(−9,21)

بنابراین، تابع درون کلاس PVector به شکل زیر نوشته می شود:

 void mult(float n) {
   x = x * n;
   y = y * n;
 } 

و پیاده سازی ضرب در برنامه نویسی به سادگی زیر است

 PVector u = new PVector(-3,7);
u.mult(3); 

مثال ۱-۴ ضرب یک بردار

 void setup() {
  size(640,360);
}
 
void draw() {
  background(255);
 
  PVector mouse = new PVector(mouseX,mouseY);
  PVector center = new PVector(width/2,height/2);
  mouse.sub(center);
 
  mouse.mult(0.5);
 
  translate(width/2,height/2);
  line(0,0,mouse.x,mouse.y);
 
} 

تقسیم درست مثل ضرب است-- ما خیلی ساده علامت ضرب را (نشان ستاره *) را با علامت تقسیم (خط مورب /) جایگزین می کنیم.

تصویر ۱.۹

 void div(float n) {
  x = x / n;
  y = y / n;
}
 
PVector u = new PVector(8,-4);
u.div(2); 

خصوصیات بیشتری از اعداد با بردار، مانند جمع، قواعد ساده ضرب بر روی بردار ها نیز قابل اعمال است.

قاعده شرکت پذیری:

(n*m)*v⃗ =n*(m*v⃗ )

قاعده توزیع با دو اسکالر و یک بردار:

(n*m)*v⃗ =n*v⃗ +m*v⃗

قاعده توزیع با دو بردار و یک اسکالر:

(u⃗ +v⃗ )*n=u⃗ *n+v⃗ *n

دیدگاه جدیدی بگذارید