LuckyStrike
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Доброго времени суток парни, помогите реализовать алгоритм, в С# через 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(); } |