Mình đang cần cái đặt thuật toán xén đoạn thẳng Cohen Sutherland nhưng chỉ có code viết bằng C++ , mình đang cần chuyển thành C# ai giúp giùm mình với . Thanks nhiều
Đây là code viết bằng C++
Code:
#define TRUE 1
#define FALSE 0
#define LEFT 1
#define RIGHT 2
#define TOP 4
#define BOTTOM 8
typedef struct {
int x, y;
}POINT;
typedef struct {
int Left, Top, Right, Bottom;
}RECT;
typedef int CODE;
#define Accept(a,b) (!(a|b))
#define Reject(a,b) (a&b)
// Tra ve ma vung cua p la c
void EnCode(POINT p, CODE &c, RECT rWin)
{
c = 0;
if(p.x < rWin.Left)
c |= LEFT;
if(p.x > rWin.Right)
c |= RIGHT;
if(p.y > rWin.Top)
c |= TOP;
if(p.y < rWin.Bottom)
c |= BOTTOM;
}
// Hoan vi hai diem p1 va p2 sao cho p1 luon nam ngoai cua so
void SwapPoint(POINT& p1, POINT &p2, CODE &c1, CODE &c2)
{
if(!c1) // Neu p1 nam hoan toan trong cua so
{
POINT p;
p = p1;
p1 = p2;
p2 = p;
CODE c;
c = c1;
c1 = c2;
c2 = c;
}
}
// Tra ve TRUE neu co cat cua so. Nguoc lai tra ve FALSE
int CohenSutherlandClipping(POINT P1, POINT P2, POINT &Q1, POINT &Q2, RECT rWin)
{
int fStop = FALSE, fResult = FALSE;
CODE c1, c2;
while(!fStop)
{
EnCode(P1, c1, rWin);
EnCode(P2, c2, rWin);
// Neu duong thang nam hoan toan ben trong cua so
if(Accept(c1, c2))
{
fStop = TRUE; // break
fResult = TRUE;
} // Accept
else
{
// Neu duong thang nam hoan toan ben ngoai cua so
if(Reject(c1,c2))
{
fStop = TRUE; // break
} // Reject
else // Xet truong hop duong thang co the cat cua so
{
SwapPoint(P1, P2, c1, c2);
float m;
if(P2.x!=P1.x)
m = float(P2.y-P1.y)/(P2.x-P1.x);
if(c1 & LEFT)
{
P1.y += (rWin.Left-P1.x)*m;
P1.x = rWin.Left;
} // Left
else
{
if(c1 & RIGHT)
{
P1.y += (rWin.Right-P1.x)*m;
P1.x = rWin.Right;
} // Right
else
{
if(c1 & TOP)
{
if(P2.x!=P1.x)
P1.x += (rWin.Top - P1.y)/m;
P1.y = rWin.Top;
} // Top
else // Bottom
{
if(P2.x!=P1.x)
P1.x += (rWin.Bottom - P1.y)/m;
P1.y = rWin.Bottom;
} // Bottom
}
}
} // Xet truong hop duong thang co the cat cua so
}
} //while
Q1 = P1;
Q2 = P2;
return (fResult);
} //CohenSutherlandClipping