求...判断一个点是否在(不规则)四边形当中

作者&投稿:潜花 (若有异议请与网页底部的电邮联系)
不规则四边形怎么确定中心点~

不规则四边形 把对角线相连,对角线交叉点即为中心点

四个点两两组成直线。
可得四个点的直线方程。
两点式直线方程:y-y1=[(y1-y2)/(x1-x2)]×(x-x1)

其中两两直线的斜率必相等,就是: (y1-y2)/(x1-x2) 部分相等。
将x带入四个方程解y',那么y必在斜率相等的一对直线之间,就是y'<y<y"。
一共四条,两对直线。

如果不在,必然有y<y'<y",在矩形上必然有某一组中y=y',另一组满足y'<y<y"。(如果只是在延长线上,一组满足,另一组不满足)

对于平行四边形适用。
////////////////////////////////////////////////
#include
using namespace std;
int main()
{
float *x=new float [4];//四个点的横坐标
float *y=new float [4];//四个点的纵坐标
float *ty=new float [4];//经计算后的y`值
float fx,fy;//目标点的坐标
float flag[2];//判断点与平行的一对直线的位置,两两平行,所以有两对。
int i;//循环用变量

cout<<"按任意时针方向顺序输入"<<endl;
for(i=0;i<=3;i++)//输入数据
{
cout<<"x"<<i+1<<"= ";
cin>>x[i];
cout<<"y"<<i+1<<"= ";
cin>>y[i];
cout<<endl;
}
cout<<"目标点:"<<endl;
cout<<"点x"<<"= ";
cin>>fx;
cout<<"点y"<<"= ";
cin>>fy;


float k[2]={0,0};//两对直线的斜率,因为两两平行相等,所以只有2个值
for (i=0;i<=1;i++)//当斜率存在的时候(直线垂直x轴时斜率不存在)计算斜率
{
if(x[i]!=x[i+1])
{
k[i]=(y[i]-y[i+1])/(x[i]-x[i+1]);//计算公式是(y1-y2)/(x1-x2),初中几何
}
}

for(i=0;i<=3;i++)//将目标点的x值带入四条直线方程,计算x位置的四条直线的y`值。
{
ty[i]=k[i%2]*(fx-x[i])+y[i];
}

for(i=0;i<=1;i++)//判断位置,
{
if(x[i]==x[i+1])//斜率不存在的时候,x应该在一对平行直线的x之间
{
flag[i]=(x[i]-fx)*(x[i+2]-fx);
//若在之间,则差异号,乘积为负;在一条直线上,则其中一个是0,乘积为0;则在一侧,不在其之间,则同号。
}
else//斜率存在时,y在一对平行的直线y`之间
{
flag[i]=(ty[i]-fy)*(ty[i+2]-fy);
//同上
}
}
if((flag[0]*flag[1])>0 && (flag[0]+flag[1])<0)//若都在之内
{
cout<<"在矩形内"<<endl;
}
else if((flag[0]*flag[1])==0 && (flag[0]+flag[1])<=0)//一个在线上,一个在之内
{
cout<<"在矩形上"<<endl;
}
else
{
cout<<"在矩形外"<<endl;
}
return 0;
}
/////////////////////////////////////////









!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
无敌了,我又想到一个超简单的办法,只对矩形有效。
如果在矩形外,那么矩形的相邻点与目标点形成的三角形中一定有钝角三角形。 而且一定有两个!那么关键的算法只要两行就解决了
/////////////////////////////////////////
#include
#include "math.h"
using namespace std;
int main()
{
float *x=new float [4];//四个点的横坐标
float *y=new float [4];//四个点的纵坐标
float fx,fy;//目标点的坐标
int i;//循环用变量

for(i=0;i<=3;i++)//输入数据
{
cout<<"x"<<i+1<<"= ";
cin>>x[i];
cout<<"y"<<i+1<<"= ";
cin>>y[i];
cout<<endl;
}
cout<<"目标点:"<<endl;
cout<<"点x"<<"= ";
cin>>fx;
cout<<"点y"<<"= ";
cin>>fy;

for(i=0;i<=3;i++)
{
if( (pow((x[i]-x[(1+i)%4]),2) +pow((y[i]-y[(1+i)%4]),2) +pow((x[i]-fx),2) +pow((y[i]-fy),2) ) < (pow((fy-y[(1+i)%4]),2) +pow((fx-x[(1+i)%4]),2) )) //根据勾股定理判断是否为钝角三角形 。因为有两个,所以不用判断长短,只要找出一个就可以解决问题,而且矩形边一定是短边 ,pow是乘方函数。
{
break;
}
}
if(i==4)
{
cout<<"在矩形内"<<endl;
}
else
{
cout<<"在矩形外"<<endl;
}
return 0;
}

1、若有3点共线 4个点不构成4边形
2、无三点共线 三点构成三角形 另外一点在三角形内
则4个点可以构成3个 凹四边形 没有任何一点同时属于这3个凹四边形(这里把在边上的点认为不在四边形内)在三角形内的点都有可能属于某个四边形
3、四点构成凸四边形 设4点位A,B,C,D
求出直线AB和CD AC和BD AD 和BC得交点 若交点在线段AB 或AC或AD上则舍去这组 剩余两组 则为四边形4边 比如四边为 AB 和CD, AD和BC 则把点P坐标带入AB,CD方程 若二者异号 则说明点在2直线之间 同理验证AD和BC 都异号的话说明P在四边形内部

从点所在位置做一个水平或者垂直的射线
计算它和多边形的交点,奇数在内,偶数在外

所以要先编一个被调程序实现求四边形四边的方程(线段,规定x的范围);然后求射线方程(若作水平射线则限定x范围,垂直则限定y的范围)与四边的交点数;再求射线与四边的交战。再判断奇偶性即可。

建议你看看凸包算法,也可以用这个来判断。

依题意应该是平面四点
平面四点组成的任意四边形,就是四点的连线组成的四边形
仅且仅有这一种情况
再判断目标点是否再四边形内,都很容易了

从点所在位置做一个水平或者垂直的射线计算它和多边形的交点,奇数在内,偶数在外

可以尽管放心用,这是一个计算机图形学的基本算法思想。

由四个点判断任意四边形的四条边所在直线
然后以(0,0)为标准判断目标点(a,b)与四条直线的位置关系
综合四个关系判断目标点是否在这四条直线所围成的四边形里


c++ 怎么判断1个点在一个不规则的四边形内
这个是属于计算几何算法了,判断一个点是否属于任意多边形,就要以这个点为横坐标,画一条横向射线,如果和多边形的交点个数为奇数则在多边形内,否则就在外,特殊情况:1、当射线与其中一条边重合,那么边忽略不计;2、当射线与其中一顶点相交(外凸),交点只能计算一个;3、当射线与其中一顶点相交(...

如何判断是否为间断点?
1、振荡间断点函数在该点处在某两个值比如-1和+1之间来回振荡 2、无穷间断点函数在该点极限不存在趋于无穷 先看函数在哪些点是没有意义的再分两大类判断:无穷间断点和非无穷间断点这两种应该很容易区分在非无穷间断点中,还分可去间断点和跳跃间断点如果极限存在就是可去间断点,不存在就是跳跃间...

如何判断一个多边形是否在一个点集内部?
(1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。(2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。(3)光线投射法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说...

一个点是什么意思
1. 基础概念:在日常用语中,一个点可能指的是一个基本的定位或者位置。比如在几何学中,点是一个没有大小、只有位置的基本元素。它可能是线段的端点或图形的顶点。此外,在平面坐标系中,点可以用一对数字来定义其具体位置。这是点的最基础和普遍的理解。2. 抽象意义:在某些抽象语境下,“一个点...

PHP算法:如何判断一个已知坐标点存在于一个多边形内
我们先判断一个点是否在一个三角形内部。一个三角形在一个坐标系(譬如由A、B、C三点组成)中,我们可以通过计算它的有向面积来判断A、B、C三点在坐标系中的顺逆。当然,在此之前我们必须先订立一套计算面积的规则。比如,在笛卡尔坐标系中,我们利用:S= ((A.x-B.x)*(A.y+B.y)+(B.x...

如何判断一个坐标是否在圆内?
中心为(0,0),半径为1的圆的方程:X^2+Y^2=1 若点(m,n)满足m^2+n^2<1则点在圆内 同理,若>则在圆外

如何在Excel中判断当前时间点是否在一个时间段内?
一、如下图,要在B1单元格中判断当前时间(当前时间显示在了A3单元格)是否在上午5点到9点之间,那么首先需要输入两个辅助单元格,在这两个单元格内分别输入这个时间段的两个时间(这个时间段的两个时间点可以输入在任意两个空白单元格内,只需后面更改公式中的单元格参数即可)。二、这时在B1单元格中...

EXCEL如何判断特定时间点是否在一个时间区间内
3、然后点击样式组内的条件格式选项,会出现一个下拉菜单,选择菜单中的第一个选项“突出显示单元格规则”。4、之后,会出现一个二级菜单,在其中选择第二个小于选项。5、点击之后,会出现一个小于弹框。在左侧输入要设置excel内数据要小于的数值。6、点击确定之后,excel表格就会变成如下的样子。

股票一个点是多少钱
股票市场中的“一个点”是指百分之一的简称,用来表示股票价格的变动指数。例如,当一只股票价格上涨了5个点时,这意味着它的价格上升了5%。股票一个点的具体价值取决于股票的当前价格。假设股票价格为100元人民币\/股,那么一个点就代表1元;如果股票价格为50元\/股,一个点则相当于0.5元。每个股票...

c++ 怎么判断1个点在一个不规则的四边形内
float *y=new float [4];\/\/四个点的纵坐标 float *ty=new float [4];\/\/经计算后的y`值 float fx,fy;\/\/目标点的坐标 float flag[2];\/\/判断点与平行的一对直线的位置,两两平行,所以有两对。int i;\/\/循环用变量 cout<<"按任意时针方向顺序输入"<<endl;for(i=0;i<=3;i++)\/\/...

新绛县13268597687: 怎么判断一点是否在一个不规则的封闭的区域里 -
墨岩麦白: 如果不规则的封闭区是凸多边型,有现成的计算方法.如果不规则的封闭区不是凸多边型,可以过该点作x向和y向的射线,再根据它跨越的边线(数目和边线方向)判断.当然,如果你有建三角形网格的程序(有限单元法常用),可以建网格,再判断该点是否落在某三角形内.

新绛县13268597687: 如何判断一个点在一个不规则图形里 -
墨岩麦白: 把点坐标代进去 大于零在外面 小于零在里面

新绛县13268597687: 求...判断一个点是否在(不规则)四边形当中 -
墨岩麦白: 1、若有3点共线 4个点不构成4边形 2、无三点共线 三点构成三角形 另外一点在三角形内则4个点可以构成3个 凹四边形 没有任何一点同时属于这3个凹四边形(这里把在边上的点认为不在四边形内)在三角形内的点都有可能属于某个四边形 3、四点构成凸四边形 设4点位A,B,C,D求出直线AB和CD AC和BD AD 和BC得交点 若交点在线段AB 或AC或AD上则舍去这组 剩余两组 则为四边形4边 比如四边为 AB 和CD, AD和BC 则把点P坐标带入AB,CD方程 若二者异号 则说明点在2直线之间 同理验证AD和BC 都异号的话说明P在四边形内部

新绛县13268597687: 判断点在不规则图形内的算法.急! -
墨岩麦白: 这个...在你认为无穷远的地方找一个点,然后与已知点连一条线段.看这个险段与封闭圈的交点的个数如果是奇数个则在里面,偶数个在外面(相切算2个或不算)

新绛县13268597687: 求一个算法,判断一个点是不是在一个不规则的图形内 -
墨岩麦白: 如果是折线不规则平面图形,可以把它分割成三角形,求出每条边的直线方程,再加以判断.估计你是编程时遇到的问题吧.

新绛县13268597687: 判断一个点是否在一个不规则多边形内? -
墨岩麦白: 点与每个多边形顶点的连线跟不包含这个定点的边无交点,从所有顶点的坐标求所有边所在直线的方程,n*n的复杂度

新绛县13268597687: c++ 怎么判断1个点在一个不规则的四边形内 -
墨岩麦白: 这个是属于计算几何算法了,判断一个点是否属于任意多边形,就要以这个点为横坐标,画一条横向射线,如果和多边形的交点个数为奇数则在多边形内,否则就在外,特殊情况: 1、当射线与其中一条边重合,那么边忽略不计; 2、...

新绛县13268597687: 如何确定一个点是不是不规则图形的重心 -
墨岩麦白: 下面是一些寻找形状不规则或质量不均匀物体重心的方法. a.悬挂法 只适用于薄板(不一定均匀).首先找一根细绳,在物体上找一点,用绳悬挂,划出物体静止后的重力线,同理再找一点悬挂,两条重力线的交点就是物体重心. b.支撑法 只...

新绛县13268597687: 假设有个不规则的几何图形如何判断点(x,y)是否在几何图形内 -
墨岩麦白: 首先,楼上的说法都是错误的!!分析:设该曲线对应方程为f(x,y)=0,对平面任一点P(x0,y0),f(x0,y0)>0,f(x0,y0)=0,f(x0,y0)因此,f(x,y)=0以外的点P必满足f(x0,y0)>0或f(x0,y))其次,大于和小于零都是相对而言的,设f(x0,y0)>0,那么-f(x0,y0)不妨令g...

新绛县13268597687: 在VC6.0中如何实现“判断一个点是否在一个不规则平面范围内(凹凸都可能)??” -
墨岩麦白: 如果是凸多边形比较容易, 用射线和交点判断一下就可以了, 你的这个较为复杂,看看CGAL吧, 里面有算法 有个例子程序给你看看#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>#include <CGAL/Polygon_2_algorithms.h>...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网