Einzelnen Beitrag anzeigen

darthdungeon

Registriert seit: 24. Mär 2007
5 Beiträge
 
Delphi 7 Enterprise
 
#1

Porblem mit Arrays, die Pointer auf Record sind

  Alt 28. Mär 2007, 19:22
Hallo Com,

mein ersten thread hier im forum ;P

also, mein problem. ich habe 3 types definiert, die records sind:

Delphi-Quellcode:
type TPoints = record
  x, y : Integer;
end;

type
  TEdge =^PEdge;
  PEdge = record
  point1, point2: TPoints;
  next_edge: TEdge;
end;

type TArea = record
  edge: TEdge;
end;
nun habe ich noch 3 arrays:
Delphi-Quellcode:
  
area_list: array of TArea;
edge_list: array of TEdge;
point_list: array of TPoints;
hintergrund: ich habe 2-dimensionale polygone, die ich mit hilfe der datenstruktur beschreiben will. ein punkt vom typ tpoints besteht logischerweiße aus 2 koordinaten, eine kante vom typ tedge hat einen end- und einen anfangspunkt vom typ tpoint und die information darüber welche kante an ihrem ende liegt. damit kann ich eine fläche dadurch eindeutig beschreiben, das ich nur eine kante dafür angeben brauche,um nicht daten doppelt speichern zu müssen.
nun speicher ich alle punkte in das array point_list, das is kein problem.
wenn ich jetzt aber ein rechteck beschreiben möchte, speicher ich in point_list 4 punkte ab. dann weise ich edge_list[0] den 2 punkten aus point_list zu und zeige dann mit next_edge auf next_edge[1]. so viel zur theorie. das zuweisen mit werten an sich funktioniert, nur muss ich ja in den reocrds zeiger auf die punkte in ponit_list haben will, damit ich nicht ein punkt tausendmal ändern muss, sondern nur einmal in point_llist.
wie kann ich also die pointer richtig deklarieren?

Delphi-Quellcode:
setlength(area_list, 1);
setlength(edge_list, 4);
setlength(point_list, 4);


point_list[0].x:=100;
point_list[0].y:=100;

point_list[1].x:=500;
point_list[1].y:=100;

point_list[2].x:=500;
point_list[2].y:=500;

point_list[3].x:=100;
point_list[3].y:=500;

edge_list[0].point1:=point_list[0];
edge_list[0].point2:=point_list[1];
edge_list[0].next_edge:=edge_list[1];
edge_list[1].point1:=point_list[1];
edge_list[1].point2:=point_list[2];
edge_list[1].next_edge:=edge_list[2];
edge_list[2].point1:=point_list[2];
edge_list[2].point2:=point_list[3];
edge_list[2].next_edge:=edge_list[3];
edge_list[3].point1:=point_list[3];
edge_list[3].point2:=point_list[0];
edge_list[3].next_edge:=edge_list[0];

area_list[1].edge:=edge_list[1];
quasi das, nur das ich nicht der linken seite einmalich die rechteseite zuordnet, sondern eine pointer drauf setzte?
  Mit Zitat antworten Zitat