1

Тема: Збереження вершин відрізка

дано два масиви  х[і] та у[і]. Разом їхній індекс відповідає один одному та утворюють координату (точку), тобто, якщо і=1 то це буде координата (x[1];y[1]).
проходить алгоритм, який перевіряє, чи з'єднаються дві точки, якщо так то потрібно зберегти координати двох вершин, тобто x[і] y[і] x[й] y[й]
Допоміжіть якомога компактніше це організувати   (саме збереження) , щоб у подальшому було зручно користуватись ними, та перевірити, яка точка з якими\якою зв'язана

2 Востаннє редагувалося Chemist-i (29.01.2014 23:40:10)

Re: Збереження вершин відрізка

Як зрозуміти "чи з'єднаються дві точки", тобто вони мають однакові координати?
Якщо так, то ось код:
[code=pas]
//Len ширина/висота матриці координат
//x - масив координат х [0..Len-1]
//y - масив координат y [0..Len-1]
//coordinate1, coordinate2 : TPoint;

for i := 0 to Len-1 do
    for j := i to Len-1 do
        if ( (x[i] = x[j]) and (y[i] = y[j]) ) then
            begin
                //Зберігаємо
                coordinate1 := Point(x[i], y[i]);
                coordinate2 := Point(x[j], y[j]);
               
                //ну або
                coordinate1.X := x[i];
                coordinate1.Y := y[i];
                coordinate2.X := x[j];
                coordinate2.Y := y[j];
            end;
[/code]

3

Re: Збереження вершин відрізка

Chemist-i написав:

Як зрозуміти "чи з'єднаються дві точки", тобто вони мають однакові координати?

ні, з'єднаються в плані уявної лінії, наприклад (2;3) (5;3)
алгоритм перевірки описувати не буду, але результат його буде:так або ні, якщо так то зберегти.
Але таких відрізків буде багато, та можливо, що з однієї точки буде виходити декілька відрізків.
Тому потрібно координати зберегти так, щоб в подальшому було зручно оперувати ними, враховуючи те з якою кількістю вершин вона з'єднана.

4

Re: Збереження вершин відрізка

т.е. мають спільну координату?

5 Востаннє редагувалося koala (30.01.2014 00:15:08)

Re: Збереження вершин відрізка

Тобто у вас є граф, і вам треба швидко (і без зайвих витрат пам'яті) знаходити певну його характеристику? Яку саме?
Зрештою, матриці інцидентності і суміжності ніхто не скасовував; крім того, можна зберігати все в масиві такого виду
[code=pascal]type Vertex=record
    x,y :integer;
    connected:set of integer;
  end;

var Points: array of Vertex;
...
  {з''єднати точки 20 і 30}
  Points[20].connected := Points[20].connected + 30;
  Points[30].connected := Points[30].connected + 20;[/code]

Подякували: fer1231

6 Востаннє редагувалося Chemist-i (30.01.2014 01:30:10)

Re: Збереження вершин відрізка

Мій варіант:
[code=pas]
    Type
        TtwoCoordinates = Record
            X1 : Integer;
            Y1 : Integer;
            X2 : Integer;
            Y2 : Integer;
        End;
   
    //ну а далі так само
var
    ResultArray array of TtwoCoordinates; //TtwoCoordinates це запис, який зберігає 4 значення типу integer
   
for i := 0 to Len-1 do
    for j := i to Len-1 do
        if ( (x[i] = x[j]) or (y[i] = y[j]) ) then
            begin
                SetLength(ResultArray, Length(ResultArray)+1); //Збільшуємо розмір динамічного масиву на 1
               
                ResultArray[Length(ResultArray-1)].X1 := x[i];
                ResultArray[Length(ResultArray-1)].Y1  := y[i];
                ResultArray[Length(ResultArray-1)].X2 := x[j];
                ResultArray[Length(ResultArray-1)].Y2 := y[j];
            end;   
[/code]

Подякували: Torbins, fer1232