Funkcja liniowa i kwadratowa

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

# Funkcja liniowa i kwadratowa

Wed
14
Jan 2009

W programowaniu bardzo często stosuje się funkcję liniową lub kwadratową. Przykładowo, jeśli mgła ma się zaczynać w głębokości Min i kończyć w głębokości Max, to jej intensywość od głębokości można wyrazić prostym wzorem:

FogIntensity = saturate(Depth * FogScale + FogBias);

Problem w tym, żeby znaleźć współczynniki tej funkcji. Do tego przydają się wzory, które wyliczają współczynniki dla funkcji przechodzącej przez dane punkty. Potrafi to robić mój GameDev Calc, ale żeby policzyć je w swoim programie albo na kartce, warto mieć pod ręką te wzory.

Funkcja liniowa Funkcja liniowa przechodząca przez dwa punkty (x1, y1), (x2, y2) ma wzór:

Funkcja liniowa - współczynniki

Co w przełożeniu na kod daje:

float W = p2.x - p1.x;
if (W == 0.f) Error();
float a = (p2.y - p1.y) / W;
float b = (p2.x * p1.y - p2.y * p1.x) / W;

Z kolei funkcja kwadratowa Funkcja kwadratora przechodząca przez trzy punkty (x1, y1), (x2, y2), (x3, y3) ma wzór:

Funkcja kwadratowa - współczynniki

Co daje trochę dłuższy kod:

float x1 = p1.x, x2 = p2.x, x3 = p3.x;
float y1 = p1.y, y2 = p2.y, y3 = p3.y;
float W =
  x1 * x1 * x2 + x3 * x3 * x1 +
  x2 * x2 * x3 - x1 * x1 * x3 -
  x2 * x2 * x1 - x3 * x3 * x2;
if (W == 0.f) Error();
float a =
  y1 * x2 + y3 * x1 + y2 * x3 -
  y1 * x3 - y2 * x1 - y3 * x2;
float b =
  x1 * x1 * y2 + x3 * x3 * y1 +
  x2 * x2 * y3 - x1 * x1 * y3 -
  x2 * x2 * y1 - x3 * x3 * y2;
float c =
  x1 * x1 * x2 * y3 + x3 * x3 * x1 * y2 +
  x2 * x2 * x3 * y1 - x1 * x1 * x3 * y2 -
  x2 * x2 * x1 * y3 - x3 * x3 * x2 * y1;
a /= W;
b /= W;
c /= W;

Comments | #math Share

Comments

STAT NO AD
[Stat] [STAT NO AD] [Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2019