A. c語言編程:給定N個點的坐標,這N個點依次圍成一閉合多邊形,再給一點(X,Y),判斷它是否在多邊形中。
這個閉合多邊形  它是一個規則的多邊形的話  很簡單
所謂規則的 就是假定任何一個內角 都是小於一百八十度的..
那麼 要判斷一個點是不是在里頭就容易了  很多方法的
比如判斷它與沒相鄰兩個點的 夾角和最後是否等於360度
還可以判斷 它到每條邊的距離最長的 是否比端點距離最長的兩個點的距離短..
如果是不規則的多邊形  比如像月亮那種....就麻煩咯
B. 求c語言高手逐句解釋下列程序語句的意思,如 定義函數,設置宏等
#include <stdio.h>                                /*頭文件*/
#define N 100                                      /*定義常量N為100*/
typedef struct{                                     /*定義一個結構體*./
 double x[N];                                       
 double y[N];
 int pointNum;                                 
}points;                                               /*定義變數points*/
int polygon(points nps)                      /*定義一個名為polygon的函數*/
{
 double var1,var2;
 int i,j,k;
 if(nps.pointNum<3) return 0;                      /*判斷變數pointNum是否小於3,若是,則返回0*/
 for(i=0;i<nps.pointNum;i++)                                                                                                              /*在polygon里定義for的循環函數,i從0到pointNum內循環,每循環一次加1*/
 {
  j=(i+2)%nps.pointNum;                       /*j=(i+2)除以pointnum的余數*/
  k=(i+1)%nps.pointNum;                     /*k=(i+1)除以pointNum的余數*/
  var1=(nps.x[i]-nps.x[k])*(nps.y[i]-nps.y[j])-(nps.y[i]-nps.y[k])*(nps.x[i]-nps.x[j]);
  for(j=(j+1)%nps.pointNum;j!=i;j=(j+1)%nps.pointNum)   
/*在上一個for函數里再建立一個for函數,j從(j=1)除以poinyNum的余數到j不等於i為止,每循環一次加(j=1)除以poinyNum的余數*/
  {
   var2=(nps.x[i]-nps.x[k])*(nps.y[i]-nps.y[j])-(nps.y[i]-nps.y[k])*(nps.x[i]-nps.x[j]);
   if(var1*var2<0) return 0;                           /*如果var1乘var2小於0,則返回0*/
   if(var2!=0) var1=var2;                              /*如果var2不等於0,則把var2的值給var1*/
  }                    /*第二個for結束*/
  if(var1==0) return 0;                                 /*如果var1等於0,則返回08/
 }                    /*第一個for結束*/
 return 1;
}                     /*polygon函數定義結束*/
main()            /*主函數*/
{
 int i;
 points nps;
 printf("請輸入頂點的個數:");                  /*輸出「請輸入頂點的個數:」*/
 scanf("%d",&nps.pointNum);                /*輸入數據*/
 printf("請輸入這些頂點的坐標,每個點的橫坐標和縱坐標用逗號分隔開( 例如12.5,34 ):\n");
 for(i=0;i<nps.pointNum;i++)                /*依次輸出幾個頂點及x[i],y[i]*/
 {
  printf("第%d個頂點:",i+1);
  scanf("%lf,%lf",&nps.x[i],&nps.y[i]);
 }
 if(polygon(nps))                             /*如果poligon返回為真,則輸出「該多邊形是凸多邊形。」*/
  printf("該多邊形是凸多邊形。\n");
 else                                              /*否則輸出「該多邊形不是凸多邊形!!!」*/
  printf("該多邊形不是凸多邊形!!!\n");
C. c語言求凸多邊形面積
輸入邊數 n,  輸入 多邊形各頂點 x,y 坐標,逆時針順序 (保證 叉乘積 為 正)。
各頂點 x,y 坐標 減去 a[0][0]。以 a[0][0] 為主 計算各三角形面積並累加。
#include <stdio.h> 
#include <stdlib.h> 
 
main( )
{
int i,j,n;
double s=0;
double a[15][2];  
scanf("%d",&n);    
for(i=0;i<n;i++)       
for(j=0;j<2;j++)	     
scanf("%lf",&a[i][j]);	
for(i=0;i<n;i++)       
for(j=0;j<2;j++)	     
a[i][j]=a[i][j]-a[0][0];
for(i=1;i<n-1;i++)
{
s = s + 0.5*(a[i][0]*a[i+1][1]-a[i+1][0]*a[i][1]);
}
printf("%.2lf",s);	
return 0; 
}
D. C語言實現多邊形填充
樓主問的是圖形學演算法。。1樓給出的是??
有以前寫了一個多邊形種子填充演算法用的是貝塞爾方法你拿去看下把。。
1 用Bresenham直線與圓組成的扇形
void CFill4Dlg::Bresenham(int x0,int y0,int x1,int y1,int color)
{
 int x,y,dx,dy,e;
 dx=y1-x0;
 dy=y1-y0;
 e=-dx;
 x=x0;
 y=y0;
 CClientDC dc(this);
 for(x=x0;x<x1;x++)
 {
  dc.SetPixel(x,(int)(y+0.5),color);
  e=e+2*dy;
  if(e>=0)
  {
   y++;
   e=e-2*dx;
  }
 }
}
void CFill4Dlg::CirclePoints(int x,int y,int m,int n,int color)
{
 CClientDC dc(this);
 dc.SetPixel(x+m_cx,y+m_cy,color);
 dc.SetPixel(y+m_cx,x+m_cy,color);
 dc.SetPixel(-x+m_cx,y+m_cy,color);
 dc.SetPixel(y+m_cx,-x+m_cy,color);
 dc.SetPixel(x+m_cx,-y+m_cy,color);
 dc.SetPixel(-y+m_cx,x+m_cy,color);
 dc.SetPixel(-x+m_cx,-y+m_cy,color);
 dc.SetPixel(-y+m_cx,-x+m_cy,color);
} 
void CFill4Dlg::MidPointCircle(int r,int m,int n,int color)
{
 int x,y;
 float d;
 x=0;
 y=r;
 d=float(1.25-r);
 CirclePoints(x,y,m,n,color);
 while(x<=y)
 {
  if(d<0)
   d+=2*x+3;
  else
  {
   d+=2*(x-y)+5;
   y--;
  }
  x++;
  CirclePoints(x,y,m,n,color);
 }
}
2 填充:
種子設定 filled_color=getpixel(m_zx,m_zy);
typedef struct
{//記錄種子點
 int x;
 int y;
}seed;
seed * seed_p;
#define STACKTOTAL    3000
void stack_init();
void setstackempty();
void stackpush(seed pt);
seed stackpop();
bool isstackempty();
int stack_number;
填充:
void CFill4Dlg::FloodFill4(int x,int y,int oldcolor,int newcolor)
{
 CClientDC dc(this);
 if((int)dc.GetPixel(x,y)==oldcolor)
 {
  drawpixel(x,y,newcolor);
  FloodFill4(x,y+1,oldcolor,newcolor);
  FloodFill4(x,y-1,oldcolor,newcolor);
  FloodFill4(x-1,y,oldcolor,newcolor);
  FloodFill4(x+1,y,oldcolor,newcolor);
 }
}
void CFill4Dlg::drawpixel(int x, int y, int color)
{
 CClientDC dc(this);
 dc.SetPixel(x,y,color);
}
E. 怎麼在VC環境下用C語言編程畫多邊形
不怎麼明白,是在控制台下畫多邊形呢,還是在窗口下呢?
窗口下很簡單吧,控制台下貌似也得創建窗口,然後使用API吧
F. c語言求多邊形周長
#include<stdio.h>
#include<math.h>
typedefstructtagPoint
{
floatx,y;
}Point;
floatleg(Pointp1,Pointp2)
{
returnsqrtf((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
floatcalc(constPoint*p,intn)
{
floatsum=0.0f;
if(n<=1)return0.0f;
for(inti=0;i<n-1;i++)
{
sum+=leg(p[i],p[i+1]);
}
sum+=leg(p[n-1],p[0]);
returnsum;
}
intmain()
{
Pointp[10];
intn;
scanf("%d",&n);
for(inti=0;i<n;i++)
{
scanf("%f%f",&p[i].x,&p[i].y);
}
printf("%.2f",calc(p,n));
return0;
}
G. C語言_凸多邊形代碼請求詳解
給30塊我都不幹
