AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Porblem mit Arrays, die Pointer auf Record sind
Thema durchsuchen
Ansicht
Themen-Optionen

Porblem mit Arrays, die Pointer auf Record sind

Ein Thema von darthdungeon · begonnen am 28. Mär 2007 · letzter Beitrag vom 30. Mär 2007
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz