java知道四个点坐标,怎么判断一个点是不是在这个矩形区域内(矩形可能是斜着放的,有一定的斜度)
java知道四个点坐标,怎么判断一个点是不是在这个矩形区域内(矩形可能是斜着放的,有一定的斜度)其实知道思路,但是数学很差不会,所以不能写出那个方法,求救...
java知道四个点坐标,怎么判断一个点是不是在这个矩形区域内(矩形可能是斜着放的,有一定的斜度)
其实知道思路,但是数学很差不会,所以不能写出那个方法,求救 展开
其实知道思路,但是数学很差不会,所以不能写出那个方法,求救 展开
展开全部
BOOL PtInRect(
CONST RECT *lprc, // address of structure with rectangle
POINT pt // structure with point
);
Parameters
lprc
Points to a RECT structure that contains the specified rectangle.
pt
Specifies a POINT structure that contains the specified point.
Return Values
If the specified point lies within the rectangle, the return value is nonzero.
该API在使用时的缺陷为不能够满足任意TRect,都能准确判断任意一点p是否在这个TRect上。
从p1点向p2点方向画矩形(两个点画矩形有4中可能的情况:即p1为左上,左下,右下,右上坐标点)
下面代码的编译开关请至于不同状态进行调试。下一篇文章会用另一个API解决该问题。
Delphi代码:
unit Unit2;
interface
{$DEFINE LEFTBOTTOM} //注释调此编译开关 PtInRect不能正确判断在该区域的点
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
p1, p2: TPoint; //p1, p2构成矩形
FRect: TRect;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
//从p1点向p2点方向画矩形
{$IFDEF LEFTBOTTOM}
//p1为左下坐标,此时PtInRect能够正确判断在该区域的点
p1.X := 30;
p1.Y := 30;
p2.X := 200;
p2.Y := 110;
{$ELSE}
//p1为右上坐标,此时PtInRect不能正确判断在该区域的点
p1.X := 200;
p1.Y := 110;
p2.X := 30;
p2.Y := 30;
{$ENDIF}
FRect.Left := p1.X;
FRect.Right := p2.x;
FRect.Top := p1.y;
FRect.Bottom:= p2.y;
end;
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
p: TPoint;
begin
p.X := x;
p.Y := y;
if PtInRect(FRect, p) then
ShowMessage('该点在矩形区域内');
end;
procedure TForm2.FormPaint(Sender: TObject);
begin
Canvas.Rectangle(FRect);
end;
end.
这是其他人写的东西,你看看行不行!我反正看不懂!
CONST RECT *lprc, // address of structure with rectangle
POINT pt // structure with point
);
Parameters
lprc
Points to a RECT structure that contains the specified rectangle.
pt
Specifies a POINT structure that contains the specified point.
Return Values
If the specified point lies within the rectangle, the return value is nonzero.
该API在使用时的缺陷为不能够满足任意TRect,都能准确判断任意一点p是否在这个TRect上。
从p1点向p2点方向画矩形(两个点画矩形有4中可能的情况:即p1为左上,左下,右下,右上坐标点)
下面代码的编译开关请至于不同状态进行调试。下一篇文章会用另一个API解决该问题。
Delphi代码:
unit Unit2;
interface
{$DEFINE LEFTBOTTOM} //注释调此编译开关 PtInRect不能正确判断在该区域的点
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
p1, p2: TPoint; //p1, p2构成矩形
FRect: TRect;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
//从p1点向p2点方向画矩形
{$IFDEF LEFTBOTTOM}
//p1为左下坐标,此时PtInRect能够正确判断在该区域的点
p1.X := 30;
p1.Y := 30;
p2.X := 200;
p2.Y := 110;
{$ELSE}
//p1为右上坐标,此时PtInRect不能正确判断在该区域的点
p1.X := 200;
p1.Y := 110;
p2.X := 30;
p2.Y := 30;
{$ENDIF}
FRect.Left := p1.X;
FRect.Right := p2.x;
FRect.Top := p1.y;
FRect.Bottom:= p2.y;
end;
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
p: TPoint;
begin
p.X := x;
p.Y := y;
if PtInRect(FRect, p) then
ShowMessage('该点在矩形区域内');
end;
procedure TForm2.FormPaint(Sender: TObject);
begin
Canvas.Rectangle(FRect);
end;
end.
这是其他人写的东西,你看看行不行!我反正看不懂!
追问
我也没看懂
追答
你百度一下吧!我倒是学的数学、但是对计算机语言基本不懂!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询