Автор: LuckyStrike
Дата сообщения: 26.02.2010 21:51
Доброго времени суток парни, помогите реализовать алгоритм, в С# через Windows приложения с помощью инструмента Panel, вот задачка:
Реализовать в виде процедуры CDA алгоритм «Цифровой дифференциальный анализатор».
Предполагается, что:
• (x1, y1) — начальная точка отрезка;
• (x2, y2) — конечная точка отрезка;
• IntRe(x) — функция, преобразующая вещественные числа в целые;
• Sign(x) — функция, возвращающая -1, 0, 1 для отрицательного, нулевого и положительного аргументов соответственно;
• Plot(x,y) — функция, отображающая на экране точку с координатами (x, y).
Алгоритм:
If abs(x2-x1)>=abs(y2-y1) then
Длина=abs(x2-x1)
else
Длина=abs(y2-y1)
end if
dx=(x2-x1)/Длина
dy=(y2-y1)/Длина
x=x1+0.5*Sign(dx)
y=y1+0.5*Sign(dy)
i=1
while (i<=Длина)
Plot(IntRe(x),IntRe(y))
x=x+dx
y=y+dy
i=i+1
end while
finish
а вот примерный код, не пойму почему не работает(
Graphics _graphic;
Pen _pen;
private int Sign(double arg)
{
if(arg>0) return 1;
else if (arg<0)return -1;
else return 0;
}
private int IntRe(double arg)
{
return Trancate(arg);
}
private void Plot(int cordX, int cordY)
{
_graphic.DrawCurve(_pen, new Point[] {new Point(cordX, cordY)});
}
private void Calc()
{
double x1=0;
double x2=0;
double y1=0;
double y2=0;
double len=0;
double dx=0;
double dy=0;
double x=0;
double y=0;
if(Abs(x2-x1)>=Abs(y2-y1))
{len = Abs(x2-x1);}
else
{len = Abs(y2-y1);}
dx=(x2-x1)/len;
dy=(y2-y1)/len;
x=x1+0.5*Sign(dx);
y=y1+0.5*Sign(dy);
for(int i=0;i<len;i++)
{
Plot(IntRe(x),IntRe(y));
x+=dx;
y+=dy;
}
}
void main()
{
_pen = new Pen(Color.Red, 3);
_graphic = _panel.CreateGraphic();
}