📄 wzcroundedbox.cxx
字号:
#include "wzcoordinates.hxx"
#include <math.h>
wzRoundedBoxCoordinates::wzRoundedBoxCoordinates(wzFloat cx, wzFloat cy, wzFloat xl, wzFloat yl)
:xc(cx),yc(cy),lx(xl),ly(yl)
{
ymin[0] = 0;
phi = lx+ly;
ymin[1] = - wzPi*phi-2*lx-2*ly;
ymax[1] = wzPi*phi+2*lx+2*ly;
st1 = ly;
st2 = ly + phi*wzPi/2;
up = ly + phi*wzPi/2 + lx;
st3 = ly + phi*wzPi/2 + 2*lx;
st4 = ly + phi*wzPi + 2*lx;
st5 = ymax[1];
test();
}
void wzRoundedBoxCoordinates::x(wzFloat *x, const wzFloat *y) const
{
wzFloat sig,f;
if(y[1]>0) {sig=1; f=y[1];} else {sig=-1; f=-y[1];}
if(f<st2){
if(f<st1){
x[0] = lx+y[0];
x[1] = f;
}else{
x[0] = lx+y[0]*cos((f-st1)/phi);
x[1] = ly+y[0]*sin((f-st1)/phi);
}
}else if(f<st4){
if(f<st3){
x[0] = -lx-f+st3;
x[1] = ly+y[0];
}else{
x[0] = -lx-y[0]*sin((f-st3)/phi);
x[1] = ly+y[0]*cos((f-st3)/phi);
}
}else{
x[0] = -lx-y[0];
x[1] = st5-f;
}
x[1] *= sig;
x[0] += xc;
x[1] += yc;
}
void wzRoundedBoxCoordinates::y(wzFloat *y, const wzFloat *x) const
{
wzFloat xx = x[0]-xc, yy=x[1]-yc,f,sig;
if(yy>0){sig = 1; f = yy;}else{sig = -1;f = -yy;}
if(f<=ly){
if(xx>=0){
y[0] = xx-lx;
y[1] = f;
}else{
y[0] = -lx-xx;
y[1] = st5-f;
}
}else if(xx > lx){
f -= ly; xx -= lx;
try{y[1] = atan2(f,xx);}catch(...){y[1] = 0;}
y[1] *= phi;
y[1] += st1;
y[0] = sqrt(f*f+xx*xx);
}else if(xx < -lx){
f -= ly; xx = -lx-xx;
try{y[1] = atan2(xx,f);}catch(...){y[1] = 0;}
y[1] *= phi;
y[1] += st3;
y[0] = sqrt(f*f+xx*xx);
}else{
y[0] = f - ly;
y[1] = up - xx;
}
y[1] *= sig;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -