>>  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);
}




Search from ALEXA


put your ads here