!已知直线上两点的坐标如何穷举这条线上所有点的坐标?
问题点数:50、回复次数:2Top
1 楼OnDraw(给我根猴皮筋做弹弓子,打你们家玻璃去!)回复于 2002-01-07 14:35:00 得分 0
1upTop
2 楼charles_y(每天上网一小时)回复于 2002-01-07 14:37:41 得分 50
穷举是不能的!!!!!!
直线类的写法:
直线描述为: Ax+By+C=0 并且 sqrt(A*A+B*B)=1
这样一来就有:y=(-c-ax)/b;(b!=0,b如果为0就是一条垂直于的直线)
class CLine
{
public:
double a;
double b;
double c;
double m_dAlpha; //与x轴正向的夹角
public:
CalculateAlpha()
{
m_dAlpha=asin(fabs(a));
if(a>0) {
if(b<0)
return m_dAlpha;
else {
m_dAlpha=PI-m_dAlpha;
return ;
}
}
else
{
if(b>0) {
m_dAlpha=PI+m_dAlpha;
return ;
}
else {
m_dAlpha=2*PI-m_dAlpha;
return ;
}
}
}
Create(CPoint &theStartP, CPoint &theEndP)
{ double dDeltaX,dDeltaY,dComParam;
dDeltaX=theEndP.x-theStartP.x;
dDeltaY=theEndP.y-theStartP.y;
dComParam=sqrt(dDeltaX*dDeltaX+dDeltaY*dDeltaY);
a=(dDeltaY)/dComParam;
b=-1.*dDeltaX/dComParam;
c=-1*(a*theStartP.x+b*theStartP.y);
CalculateAlpha();
}
double GetY(int X)
{
return (-c-ax)/b;
}
};
这样的直线类好处不少,比如可以平移,求一点到它的距离等.参考参考吧.
Top




