⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wzcroundedbox.cxx

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 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 + -