大家好!3。8快乐,欢迎各位进来,一个数据结构问题 (100分)

  • 主题发起人 主题发起人 hug
  • 开始时间 开始时间
H

hug

Unregistered / Unconfirmed
GUEST, unregistred user!
TFieldInfo = record
FieldId: string;
FieldPoint: array of TPoint;
MAxMinPointArr:Array [0..1] of Tpoint;
TotalWidth:integer;
end;

type
TDisplayPoint= array of Tpoint;
type
TFFieldsInfo = class
do
tArr: array of TFieldInfo;
PrimalDotArr: array of TFieldInfo;
DisplayArr:array of Tpoint;
DisplayArrSize:integer;
我用数组保存图形的轮廓坐标,多个图形保存在纪录里面,
我在屏幕上划出了他们,由于需要,必须在屏幕上重新排列
他们的位置,排列后我想从屏幕的左上角(也就是从X德的最小值开始),
把所有轮廓的坐标放到相应的书组里面,
如从左边数第一个轮廓坐标放到
PrimalDotArr[0].FieldPoint[index]里面,
第2 个放到
PrimalDotArr[1].FieldPoint[index]里面,
.
.
.
其中MAxMinPointArr[index]保存的轮廓的左右边缘的点
我的代码如下:
经请各位帮我改一下:谢谢
procedure TLayoutForm.SpeedButton1Click(Sender: TObject);
var
MAxMinIndex,Index,DotIndex,NextIndex,NextDotIndex:integer;
BestrowFlag:boolean;
LftPoint:Tpoint;
IndexArray:Array of integer;
begin
LftPoint.X:=10000000;
Index:=0;
do
tIndex:=0;
BestrowFlag:=false;
MAxMinIndex:=0;
for Index:=0 to High(FFieldsInfo.DotArr)do
if LftPoint.X>FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X then
LftPoint.X:=FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X;//找到最左边的轮廓边缘
NextDotIndex:=Index;
setLength(IndexArray,MaxMinIndex+1);
IndexArray[MaxMinIndex]:=NextDotIndex;
LftPoint.X:=10000000;
for Index:=0 to High(FFieldsInfo.DotArr)do
if (LftPoint.X>FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X)
and(FFieldsInfo.DotArr[IndexArray[MaxMinIndex]].MAxMinPointArr[1].X
<FFieldsInfo.DotArr[Index].MaxMinPointArr[0].X) then
begin
LftPoint.X:=FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X;
NextDotIndex:=Index;
IndexArray[MAxMinIndex]:=NextDotIndex;
Inc(MAxMinIndex);
setLength(IndexArray,MaxMinIndex);
end;
setLength(FFieldsInfo.PrimalDotArr,MaxMinIndex);
setLength(FFieldsInfo.PrimalDotArr[MaxMinIndex-1].FieldPoint,
High(FFieldsInfo.DotArr[NextDotIndex].fieldpoint)+1);
fordo
tIndex:=0 to High(FFieldsInfo.DotArr[NextDotIndex].fieldpoint)do
begin
FFieldsInfo.PrimalDotArr[MaxMinIndex].FieldPoint[DotIndex].X
:= FFieldsInfo.DotArr[NextDotIndex].FieldPoint[DotIndex].X;
FFieldsInfo.PrimalDotArr[MaxMinIndex].FieldPoint[DotIndex].Y
:= FFieldsInfo.DotArr[NextDotIndex].FieldPoint[DotIndex].Y;
{if (FFieldsInfo.DotArr[Index].MAxMinPointArr[1].X>=
FFieldsInfo.DotArr[Index+1].MAxMinPointArr[0].X )
and(FFieldsInfo.DotArr[Index].MAxMinPointArr[1].Y>=
FFieldsInfo.DotArr[Index+1].MAxMinPointArr[0].Y) then
BestrowFlag:=true;}
end;

//if BestrowFlag then
ShowMessage('图形是否有覆盖!');
end;
 
太长 ,没时间看 [:)]
 
希望各位高手前来解决!谢谢
 
说说意思吧!
 
谢谢 leilu:
我用数组保存图形的轮廓坐标,多个图形保存在纪录里面,
我在屏幕上划出了他们,由于需要,必须在屏幕上重新排列
他们的位置,排列后我想从屏幕的左上角(也就是从X德的最小值开始),
把所有轮廓的坐标放到相应的书组里面,
如从左边数第一个轮廓坐标放到
PrimalDotArr[0].FieldPoint[index]里面,
第2 个放到
PrimalDotArr[1].FieldPoint[index]里面,
.
.
.
 
怎么没有人来帮忙阿?
各位高手快来啊!!!
 
图形的重叠不好处理呀!
 
itren,再重新排列时不让他重叠,先考虑不重叠的情况!谢谢
 
是想做抓取屏幕视频吧
 
怎么没有人帮我啊?我一直都在线等!
希望高手见来看看!帮我解决一下!谢谢了
 
to fphuang,不是,我是想做别人病变轮廓,可能有多个,
需要排布,!
 
帮你定阿!希望你快得到答案阿!
 
我帮你顶
 
怎么不帮我呢?
 
谁能帮我解决,可以再加分。
 
没什么吸引力来让我们回答你的问题
 
多人接受答案了。
 
后退
顶部