ç»ä½ æ¨èä¸æ¬ä¹¦,<计ç®æºå¾å½¢å¦åºç¡>åæ³½å£,å¨åç,ææ°ååç,æ们以åä¸è¯¾ç¨ç,ä¸é¢æ常ç¨çç´çº¿åå弧ç®æ³,æ¯å¦æ°å¼å¾®åæ³çæç´çº¿,éç¹æ¯è¾æ³æè¡¥å弧,è§åº¦DDAæ³äº§çå弧,åºæ¬é½æCè¯è¨çæºç¨åº.ä½ å¯ä»¥ææè¿æ¬ä¹¦,æ¬æ¥é½ææºç¨åºç,åæ¥ç»å æäº~~
è´´ä¸ä¸ªå«äººç
/*************************************************************************
Function: int ArcXY(double dfx0,double dfy0,double dfrx,
double dfry,int angle);
Description: å¨X-Yè½´æææçå¹³é¢ä¸ï¼ä»¥å弧è¿å¨çæ¹å¼ä»ç®åä½ç½®ç»è¿æ
å®çåèç¹å°ç®çç¹ãè°ç¨æ¤å½æ°æåå°å¢å è¿å¨å½ä»¤çåºåæ°ç®ã
Parameters: dfx0, dfy0 åèç¹çX-Y轴座æ å¼
dfrx, dfry åå¿çX-Y轴座æ å¼
angle æè¡¥è§åº¦
Calls: æ
Return Value: 大æ¼æçæ¼0 ç»äºæ¤è¿å¨å½ä»¤çç¼ç
å°æ¼0 失败ï¼ä¼ åå¼çæä¹å¯åèé误信æ¯ä»£ç
**************************************************************************/
#include <stdio.h>
#include <math.h>
int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle);
int symbol(double number);
main()
{
ArcXY(0,0,-3,5,360);
getch();
}
int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle)
{
FILE *f1;
double i,j,dx,dy,dfr,x,y,ang,step,f = 0.01;
int flag,tempx,tempy,statex,statey,direction = 1;
dfr = sqrt((dfrx - dfx0) * (dfrx - dfx0) + (dfry - dfy0) * (dfry - dfy0));
if(dfx0 == 0)
{
dfx0 = 1;
dfrx = dfrx + 1;
statex =1;
}
if(dfy0 == 0)
{
dfy0 = 1;
dfry = dfry + 1;
statey =1;
}
dfrx = 2 * dfx0 - dfrx;
i = dfx0 - dfrx;
j = dfy0 - dfry;
x = dfx0 ;
y = dfy0 ;
step = ang = 180 * 2 * asin(f/(2*dfr))/3.1415926;
if(((dfx0 > 0) && (dfy0 > 0)) || ((dfx0 < 0) && (dfy0 < 0)))
{
flag = direction;
}
if(((dfx0 < 0) && (dfy0 > 0)) || ((dfx0 > 0) && (dfy0 < 0)))
{
flag = -direction;
}
f1=fopen("c:\\c.txt","w+");
if(statex ==1)
{
x = x - 1;
}
if(statey ==1)
{
y = y - 1;
}
fprintf(f1,"%f,",x);
fprintf(f1,"%f\n",y);
while(ang < angle)
{
dx = f * (j + flag*(f * i)/(2 * dfr))/dfr;
dy = f * (i - flag*(f * j)/(2 * dfr))/dfr;
tempx = symbol(x);
tempy = symbol(y);
x = x + dx;
y = y + dy;
fprintf(f1,"%f,",x);
fprintf(f1,"%f\n",y);
if( (tempx !=symbol(x)) || (tempy != symbol(y)) )
{
flag = -flag;
}
i = i - dx;
j = j + dy;
ang = ang + step;
}
return 0;
}
int symbol(double number)
{
if(number > 0)
{
return 1;
}
else
{
return -1;
}
}
int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle); è¿ä¸ªå°±æ¯åå½æ°,ä½ æ¾å°ä½ éè¦çå°æ¹æ³¨æåæ°,æèªå·±éè¦ä¿®æ¹,è¦ä¹æ·»å è¿åå¼è¿åæå
´è¶£çé¨å,è¦ä¹æ·»å åæ°æç
§ä¼ å¼ç¨çæ¹æ³åå¾,ç´çº¿çæç®åDDAç®æ³ç,éè¦çè¯æ天æä¸,ä»å¤©æç¹æäº.
温馨提示:答案为网友推荐,仅供参考