0
我想將窗口的座標從笛卡爾座標轉換爲橢圓座標系。該變換是:C++橢圓座標映射
X = E * COSH(ETA)* COS(PHI)
Y = E *的sinh(ETA)* SIN(PHI)
和逆:
ETA =重新(ACOSH(X/E + I * Y/E))
披= IM(ACOSH(X/E + I * Y/E))
(見的http://itp.tugraz.at/~schnizer/AnalyticalMethods/AnMe6%267.pdf第14頁)
到目前爲止,我實現了以下內容:
cv::Size2f _size(33,70);
float e = 0.0f;
float eta0 = 0.0f;
if(_size.height > _size.width)
{
e = sqrt(_size.height*_size.height - _size.width*_size.width);
std::complex<double> z0(0,_size.height/2/e);
eta0 = std::acosh(z0).real();
} else
{
e = sqrt(_size.width*_size.width - _size.height*_size.height);
std::complex<double> z0(_size.width/2/e,0);
eta0 = std::acosh(z0).real();
}
for(int dx = ceil(-_size.width/2); dx < floor(_size.width/2); dx++)
{
for(int dy = ceil(-_size.height/2); dy < floor(_size.height/2); dy++)
{
float eta;
float phi;
if((dx == 0) && (dy == 0))
{
eta = 0.0f;
phi = 0.0f;
}else
{
std::complex<double> z(dx/e,dy/e);
std::complex<double> k = std::acosh(z);
eta = (k.real())/eta0;
phi = fmod(k.imag() + 2.0f*CV_PI, 2.0f*CV_PI);
}
int x = 200 + dx;
int y = 200 + dy;
}
}
的問題是,橢圓座標不能擴展。 eta總是大於1,但它應該在0 < eta < inf之間縮放。對於橢圓內部的點,Eta應該爲< 1,由_size指定,對於外部點,> 1。
感謝您的任何想法。
也許你應該說一些更多你想解決的問題。 – Nobody