список списков. как мне это написать

  • Автор темы Inna1988
  • Дата начала
I

Inna1988

#1
у меня есть структура линий и структура точек. мне нужно создать список, в котором будут 2 списка : один список будет по линиям- нужно добежать до последней линии. второй список будет с точками- нужно добежать до последних точек.

это нужно для написания проги векторного редактора, а именно для рисования линий произвольной формы. у кого какие сообзажения по этому поводу , напишите , пожалуйста. я сама потом доразбираю)
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#2
На дельфях подойдет? Ну не знаю я ваш билдер..
 
I

ierofant

#3
Я не совсем понял вас, но может быть вы хотите что-то вроде этого.

C++:
class Points
{
public:
Points (int _num_points) : num_points (_num_points), points (new double [_num_points * 2]){}
~Points (){delete [] points;}

public:
int get_num_points () const {return num_points;}
void get_coordinate (int _pos, double &_x, double &_y) const
{
if (_pos < num_points)
{
_x = *(points + _pos * 2);
_y = *(points + _pos * 2 + 1);
}
}
void set_coordinate (int _pos, double _x, double _y)
{
if (_pos < num_points)
{
*(points + _pos * 2) = _x;
*(points + _pos * 2 + 1) = _y;
}
}

private:
int num_points;
double *points;
};

class Line
{
public:
void set_coordinates (double _x1, double _y1, double _x2, double _y2)
{
x1 = _x1;
y1 = _y1;
x2 = _x2;
y2 = _y2;
}
void draw (){ . . . .}

private:
double x1, y1, x2, y2;
};

class Polyline
{
public:
Polyline (const Points &_points) : points (_points), lines (new Line [_points.get_num_points () - 1])
{
double x1, y1, x2, y2;
for (int i = 0; i < get_num_lines (); i++)
{
points.get_coordinate (i * 2, x1, y1);
points.get_coordinate (i * 2 + 1, x2, y2);
lines [i].set_coordinates (x1, y1, x2, y2);
}
}
~Polyline (){delete [] lines;}

public:
Points get_points () const {return points;}
int get_num_lines () const {return points.get_num_points () -1;}	
Line* get_line (unsigned _ind)
{
Line *ret = NULL;
if (_ind < get_num_lines ()) ret = &lines [_ind];
return ret;
}
void draw () {for (int i = 0; i < get_num_lines (); i++) lines [i].draw ();}

private:
Points points;
Line *lines;
};
 
I

Inna1988

#4
спасибо большое я посмотрю и скажу чуть позже
 
I

Inna1988

#5
Я не совсем понял вас, но может быть вы хотите что-то вроде этого.

C++:
class Points
{
public:
Points (int _num_points) : num_points (_num_points), points (new double [_num_points * 2]){}
~Points (){delete [] points;}

public:
int get_num_points () const {return num_points;}
void get_coordinate (int _pos, double &_x, double &_y) const
{
if (_pos < num_points)
{
_x = *(points + _pos * 2);
_y = *(points + _pos * 2 + 1);
}
}
void set_coordinate (int _pos, double _x, double _y)
{
if (_pos < num_points)
{
*(points + _pos * 2) = _x;
*(points + _pos * 2 + 1) = _y;
}
}

private:
int num_points;
double *points;
};

class Line
{
public:
void set_coordinates (double _x1, double _y1, double _x2, double _y2)
{
x1 = _x1;
y1 = _y1;
x2 = _x2;
y2 = _y2;
}
void draw (){ . . . .}

private:
double x1, y1, x2, y2;
};

class Polyline
{
public:
Polyline (const Points &_points) : points (_points), lines (new Line [_points.get_num_points () - 1])
{
double x1, y1, x2, y2;
for (int i = 0; i < get_num_lines (); i++)
{
points.get_coordinate (i * 2, x1, y1);
points.get_coordinate (i * 2 + 1, x2, y2);
lines [i].set_coordinates (x1, y1, x2, y2);
}
}
~Polyline (){delete [] lines;}

public:
Points get_points () const {return points;}
int get_num_lines () const {return points.get_num_points () -1;}	
Line* get_line (unsigned _ind)
{
Line *ret = NULL;
if (_ind < get_num_lines ()) ret = &lines [_ind];
return ret;
}
void draw () {for (int i = 0; i < get_num_lines (); i++) lines [i].draw ();}

private:
Points points;
Line *lines;
};



привет, а у тебя есть полная прога с exe посмотреть? так вроде то . но не уверенна

пришли мне пожалуйста заархивированным файлом
 
I

ierofant

#6
Так я же это как пример набросал по твоему вопросу. Для линии произвольной формы Polyline. А полную программу с рисованием я уж не стал писать.
 
I

Inna1988

#7
Так я же это как пример набросал по твоему вопросу. Для линии произвольной формы Polyline. А полную программу с рисованием я уж не стал писать.


ясно, молодец)

так что бы мне тебе скинуть чтобы ты мне помог


недоделанную программу могу выслать , ты бы мог посмотреть и попробывать разобраться.
 
I

Inna1988

#9
Ну попробовать-то можно, давай!


visual studio 2003, любая другая но старше тоже подойдёт. задавай вопросы.

посмотри как работает прога. мне нужно что то дописать чтобы рисовали кривые линии с помощью списка . сама не понимаю что говорю))) но все таки)
 

Вложения

DarkKnight

Well-known member
01.08.2010
653
0
#10
у меня есть структура линий и структура точек. мне нужно создать список, в котором будут 2 списка : один список будет по линиям- нужно добежать до последней линии. второй список будет с точками- нужно добежать до последних точек.
Инна, а кол-во точек и количество линий различно??? Или все же одинаково?
 
I

Inna1988

#11
Инна, а кол-во точек и количество линий различно??? Или все же одинаково?


есть линия у которой начальная точка состоит из 2 координат x1,y1 и конечная точка состоит из координат x2,y2. у меня в проге массивы x1[100],x2[100],y1[100],y2[100]
 

DarkKnight

Well-known member
01.08.2010
653
0
#14
есть линия у которой начальная точка состоит из 2 координат x1,y1 и конечная точка состоит из координат x2,y2. у меня в проге массивы x1[100],x2[100],y1[100],y2[100]
Логично..... Вернее совсем не логично, у на выходит
C++:
struct Point
{
int x;
int y;
}
C++:
struct Line
{
Point Coord[2];
}
Line Arr[100] - к примеру будет массив 100-линий и 200 точек(связанных точек)
//Вообщем списка-списков у нас явно не выходит ;-)) Как не крути :))
Максимум список, его структура будет

C++:
struct Sp
{
Line Element;
Line *Next;
}
Ну и
C++:
Line *Start = NULL;
Line *Tale = NULL;