Parli di funzioni matematiche, ma la parte geometrica secondo me è la parte più semplice da implementare. supponiamo tu abbia un sistema di assi cartesiani, avrai l'asse x posizionato nella parte bassa dell'immagine e l'asse y invertito (nei pc l'asse y parte dall'angolo superiore a sinistra)... a questo punto puoi realizzare 2 funzioni di trasformazione partendo dalla posizione del centro degli assi, supponendo che questo si trovi in una variabile di tipo PointF chiamata centro:
codice:
public float TrasformaX (float x)
{
return x + centro.X;
}
public float TrasformaY(float y)
{
return centro.Y - y;
}
public PointF TrasformaXY (PointF punto)
{
return new PointF(TrasformaX(punto.X), TrasformaY(punto.Y));
}
A questo punto supponiamo che tu abbia la retta y = 2x + 5, quindi con coefficiente angolare 2 e traslazione 5, allora prendi x = -1000 e x = 1000 (per fare un esempio di due numeri tendenti a -inf e +inf, ovvero molto grandi rispetto al sistema di coordinate) e trovi i due valori Y relativi. Adesso puoi disegnare la retta che va da PuntoA a PuntoB trasformati secondo le funzioni di trasformazione sopra.