新聞中心
求用java編寫,輸入N個點的坐標,判斷這N個點能否構成一個凸多邊形。有問題可以一起討論
遞歸尋找各個點最近的點,兩點間距離可通過勾股定理求得。
創(chuàng)新互聯(lián)是一家業(yè)務范圍包括IDC托管業(yè)務,網(wǎng)絡空間、主機租用、主機托管,四川、重慶、廣東電信服務器租用,成都托管服務器,成都網(wǎng)通服務器托管,成都服務器租用,業(yè)務范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務公司。
兩個最近的點連成一條直線,
然后判斷各條直線的交點是否為輸入的那些點。
如果交點均在輸入的點處,則是凸多邊形。
只要有任意兩條線的交點不在輸入的點處,就非凸多邊形。但是要排除多點一線的情況。
求兩條線交點可有參數(shù)方程求得。
如下
兩點定一線,
線1,點1(x1,y1) 點2 (x2,y2)
線2,點3(x3,y3) 點4 (x4,y4)
t=[(y4-y3)(x3-x1)-(y3-y1)(x4-x3)] ÷ [(y4-y3)(x2-x1)-(y2-y1)(x4-x3)]
注意不要用整數(shù)計算,要用浮點數(shù),否則會得不到準確的t值
交點處坐標為
x = x1+(x2-x1)t
y = y1+(y2-y1)t
簡單點說,t=0或者1時,兩線相交于給定點,任意其他值,均交與其他點。
原理就是這些了,自己寫代碼吧
C語言編程題 題目:任意輸入4個點,求圍成四邊形的面積是多少?
我測試過了,四點一線,凹四邊形,四邊形,有兩個點共點,都可以,這里使用一條知道N邊形N個頂點坐標求N邊形的面積的公式,這些情況其實已經(jīng)可以不考慮,呵呵,自動求
凹四邊形情況:
有三點共一線形成三角形的情況:
#include?"stdio.h"
#include?"math.h"
void?main()
{
double?x[4],y[4];
for(int?i=0;i4;i++)
{
scanf("%lf%lf",x[i],y[i]);
}
double?mianji=0.0;
for(int?ii?=?1?;?ii?4?;?ii++)
{
mianji+=(x[ii-1]*y[ii]-x[ii]*y[ii-1]);
}
mianji+=x[3]*y[0]-x[0]*y[3];
mianji=?fabs(0.5*mianji);
printf("%lf\n",mianji);
}
求用c語言寫一個判斷凹凸四邊形的代碼。
你可以參考下面的方法:
.判斷一個封閉圖形是凹集還是凸集
語法:result=convex(Point *p,int n);
參數(shù):
*p: 封閉曲線頂點數(shù)組
n: 封閉曲線頂點個數(shù)
返回值: 1:凸集;-1:凹集;0:曲線不符合要求無法計算
注意:
默認曲線為簡單曲線:無交叉、無圈
源程序:
typedef struct {
double x,y;
} Point;
int convex(Point *p,int n)
{
int i,j,k;
int flag = 0;
double z;
if (n 3)
return(0);
for (i=0;in;i++) {
j = (i + 1) % n;
k = (i + 2) % n;
z = (p[j].x - p[i].x) * (p[k].y - p[j].y);
z -= (p[j].y - p[i].y) * (p[k].x - p[j].x);
if (z 0)
flag |= 1;
else if (z 0)
flag |= 2;
if (flag == 3)
return -1; //CONCAVE
}
if (flag != 0)
return 1; //CONVEX
else
return 0;
}
分享標題:java判斷凸四邊形代碼,怎么判斷凸四邊形
鏈接分享:http://fisionsoft.com.cn/article/dsegdgp.html