|
发表于 2020-6-13 00:15:01
|
显示全部楼层
suny00059 的X和Y都穷举可能会导致数量级的计算时间,我想了一个只穷举X或Y的方法,时间复杂度降低了一个数量级,看看行不行。初步测试结果好象没什么问题。
#include <math.h>
#define min(a,b) (((a) < (b)) ? (a) : (b))
double Zaxby(int Xmin, int Xmax, int Ymin, int Ymax, double a, double b)
{
int i;
double c, Zmin, dt;
if(b == 0) return min(fabs(a * Xmin), fabs(a * Xmax));
if(a == 0) return min(fabs(b * Ymin), fabs(b * Ymax));
c = a / b;
Zmin = fabs(c * Xmax - Ymax);
for(i = Xmin; i <= Xmax; i++){
dt = c * i;
if(dt > Ymin && dt < Ymax){
dt = fabs(dt - (int)(dt));
if(dt > 0.5) dt = 1.0 - dt;
}
else if(dt <= Ymin) dt = Ymin - dt;
else dt = dt - Ymax;
if(dt < Zmin) Zmin = dt;
}
return fabs(Zmin * b);
}
main()
{
double a = -1.3, b = 2.2;
int Xmin = 1, Xmax = 5, Ymin = 2, Ymax = 8;
double data;
data = Zaxby(Xmin, Xmax, Ymin, Ymax, a, b);
} |
|