大佬教程收集整理的这篇文章主要介绍了德尔福 – 直线和三角形边的交点,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
with Image1.Canvas do begin Image1.Canvas.Pen.Color :=RGB(255,0); MoveTo(30,3); // 1 LineTo(260,10);// 1-2 LineTo(100,100);//2-3 LineTo(30,3);//3-1 Image1.Canvas.Pen.Color :=RGB(0,255); MoveTo(20,80);//4 LineTo(300,40);//4-5 end;
procedure TForm1.PaintBox1Paint(Sender: TObject); var Canvas: TCanvas; T1,T2: arraY[0..2] of TPoint; R1,R2: HRGN; Buffer: PRgnData; BufferSize: Cardinal; P: PRect; I: Integer; Pt1,Pt2: TPoint; // result intersection points begin Canvas := (Sender as TPaintBoX).Canvas; // first triangle region T1[0] := Point(100,100); T1[1] := Point(260,10); T1[2] := Point(30,3); R1 := CreatePolygonRgn(T1[0],3,ALTERNATE); if R1 = 0 then RaiseLastOSError; try // show the first triangle as red (not needed for computation) Canvas.brush.Color := clRed; FillRgn(Canvas.Handle,R1,Canvas.brush.HandlE); // second triangle region T2[0] := Point(20,80); T2[1] := Point(300,40); T2[2] := Point(100,100); R2 := CreatePolygonRgn(T2[0],ALTERNATE); if R2 = 0 then RaiseLastOSError; try // show the second triangle as green (not needed for computation) Canvas.brush.Color := clGreen; FillRgn(Canvas.Handle,R2,Canvas.brush.HandlE); // determine thE intersecTing region if CombineRgn(R1,RGN_AND) = ERROR then RaiseLastOSError; // show intersection as yellow (not needed for computation) Canvas.brush.Color := clYellow; FillRgn(Canvas.Handle,Canvas.brush.HandlE); // determine the needed buffer size Buffer := nil; BufferSize := GetRegionData(R1,Buffer); // allocate buffer and get region data (array of rectangles) Buffer := AllOCMem(BufferSizE); try if GetRegionData(R1,BufferSize,Buffer) = 0 then RaiseLastOSError; // enumerate all rectangles and find points with leftmost and rightmost X P := @Buffer^.buffer[0]; Pt1 := P^.TopLeft; Pt2 := Point(P^.Right,P^.Top); for I := 0 to Buffer^.rdh.nCount - 1 do begin if P^.Left < Pt1.X then Pt1 := P^.TopLeft; if P^.Right > Pt2.X then Pt2 := Point(P^.Right,P^.Top); Inc(p); end; // connect the points with a blue line (not needed for computation) Canvas.Pen.Color := clNavy; Canvas.MoveTo(Pt1.X,Pt1.Y); Canvas.LineTo(Pt2.X,Pt2.Y); // output result points (not needed for computation) Canvas.brush.Color := Self.Color; Canvas.Font.Color := clWindowText; Canvas.TextOut(8,108,Format('Pt1: %d,%d,Pt2: %d,%d',[Pt1.X,Pt1.Y,Pt2.X,Pt2.y])); finally FreeMem(Buffer); end; finally deleteObject(R2); end; finally deleteObject(R1); end; end;
这将产生以下结果:
以上是大佬教程为你收集整理的德尔福 – 直线和三角形边的交点全部内容,希望文章能够帮你解决德尔福 – 直线和三角形边的交点所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。