public class LineEquation
{
private int A;
private int B;
private int C;

//private int x0;
//private int x1;
//private int y0;
//private int y1;
    
public LineEquation()
    {
	A = 0;
	B = 0;
	C = 0;
    }

public void set(int Y0, int Y1, int X0, int X1, double b)
    {
//	x0 = X0;
//	x1 = X1;
//	y0 = Y0;
//	y1 = Y1;
//
	A = (Y1-Y0);
	B = (X0-X1);
	C = (Y0*X1-Y1*X0);
    }    
    
public void set(EdgeLink el, V2x1 Pos)
    {
//	if(!el.parX && !el.parY)
//	    {
//		x0 = (int)(el.X1+Pos.X);
//		x1 = (int)(el.X2+Pos.X);
//		y0 = (int)(el.Y1+Pos.Y);
//		y1 = (int)(el.Y2+Pos.Y);
//		
		A = (el.Y2-el.Y1);
		B = (el.X1-el.X2);
		C = ((el.Y1+(int)Pos.Y)*(el.X2+(int)Pos.X)-(el.Y2+(int)Pos.Y)*(el.X1+(int)Pos.X));
//		return;
//	    }
//	else if(el.parY)
//	    {
//		A = 1;
//		B = 0;
//		C = (int)(-el.X1+Pos.X);
//		return;
//	    }
//	else // parallel X-axis
//	    {
//		A = 0;
//		B = 1;
//		C = (int)(-el.Y1+Pos.Y);
//		return;
//	    }
    }

public int f(int x, int y)
    {
//	System.out.print("f1(");
//	System.out.print(x);
//	System.out.print(", ");
//	System.out.print(y);
//	System.out.print(") = ");
//	System.out.println((int)(A*x+B*y+C));
	return (int)(A*x+B*y+C);
    }

public int f(int x, int y, V2x1 offset)
    {
//	System.out.print("f2(");
//	System.out.print((int)(x+offset.X));
//	System.out.print(", ");
//	System.out.print((int)(y+offset.Y));
//	System.out.print(") = ");
//	System.out.println((int)(A*(x+offset.X)+B*(y+offset.Y)+C));
	return (int)(A*(x+offset.X)+B*(y+offset.Y)+C);
    }

public void dump()
    {
	System.out.print("f(x,y) = ");
	System.out.print((int)A);
	System.out.print("*x+");
	System.out.print((int)B);
	System.out.print("*y+");
	System.out.println((int)C);
	
//	System.out.print("line : ");
//	System.out.print("(");
//	System.out.print(x0);
//	System.out.print(", ");
//	System.out.print(y0);
//	System.out.print(") - (");
//	System.out.print(x1);
//	System.out.print(", ");
//	System.out.print(y1);
//	System.out.println(")");
    }
}

