>>
Site Map
>>
Forums
>>
C/C++/C#
Forum module - topics in forum:
C/C++/C# - Ngôn ngữ lập trình cục mạnh, cho các phần mềm trên máy
Xén đường thẳng bằng các phép logic
Xén đường thẳng bằng các phép logic
Hy vọng giúp đc ai đó ^_^!
Code:
bool IsValidPoint(int x,int y) // Specified whether point is in drawing area
{
return (x >= 0 && y >= 0 && x < m_Width && y < m_Height);
}
bool IsValidPoint(CRect SrcRect,int x,int y)
{
return (x >= SrcRect.left && y >= SrcRect.top && x <= SrcRect.right && y <= SrcRect.bottom);
}
BOOL GetValidLine(int &x1,int &y1,int &x2,int &y2) // Get visible line in drawing area
{
if(IsValidPoint(x1,y1) && IsValidPoint(x2,y2)) return 1; // Ok
if((y1 < 0 && y2 < 0) || (y1 > m_Height && y2 > m_Height) || (x1 < 0 && x2 < 0) || (x1 > m_Width && x2 > m_Width)) return -1; // Two points in same side
int Size = 0;
// For x
if(x1 < 0 || x1 >= m_Width)
{
Size = (x1 < 0) ? 0 : m_Width - 1;
y1 = y1 - ((x1 - Size)*(y1 - y2)/(x1 - x2));
x1 = Size;
}
if(x2 < 0 || x2 >= m_Width)
{
Size = (x2 < 0) ? 0 : m_Width - 1;
y2 = y2 - ((x2 - Size)*(y2 - y1)/(x2 - x1));
x2 = Size;
}
// For y
if(!(y1 - y2)) return -2;
if(y1 < 0 || y1 >= m_Height)
{
Size = (y1 < 0) ? 0 : m_Height - 1;
x1 = x1 - ((y1 - Size)*(x1 - x2)/(y1 - y2));
y1 = Size;
}
if(y2 < 0 || y2 >= m_Height)
{
Size = (y2 < 0) ? 0 : m_Height - 1;
x2 = x2 - ((y2 - Size)*(x2 - x1)/(y2 - y1));
y2 = Size;
}
return IsValidPoint(x1,y1) && IsValidPoint(x2,y2);
}