我目前正在製作一個屏幕保護程序,我希望我的橢圓緩慢轉換爲Java中的矩形。什麼是最簡單的方法呢?如何將橢圓變換爲Java中的矩形?
回答
有一些形狀很容易相互轉換。例如,正方形是具有相等邊長的矩形,圓是具有相同軸的橢圓。所以很容易將一個正方形轉換成一個矩形,因爲您可以使用一些drawrectangle函數並以整個方式調整參數。同上圓圈到橢圓。
squaretorect(double width,double height)
{
//Transform a square width * width to a rectangle width * height
int n = 100;//Number of intermediate points
int i;
double currentheight;
for(i=0;i<n;i++)
{
currentheight = width + (height-width) * i/(n-1);
drawrectangle(width,currentheight);
}
}
從矩形到橢圓形轉變爲更硬的,因爲在它們之間的形狀既不是矩形也不是橢圓。也許有一些更一般的對象,可以是矩形,橢圓或其他東西,但我想不出來。
所以,簡單的方法是,但有一個更難的方法來做到這一點。假設我將單位圓劃分成N個部分並在橢圓Ei和矩形Ri上寫入點。現在,隨着轉變發生,點Ei移動到點Ri。一個簡單的方法是使用線性組合。
TI =(1-V)* EI + V *日
那麼做,我們慢慢地從0增加v到1的轉變,我們的點Ti的畫線(或更好,但插值)。
ellipsetorectangle(double a, double b, double w, double h)
{
//(x/a)^2+(y/b)^2 = 1
//Polar r = 1/sqrt(cos(phi)^2/a^2 + sin(phi)^2/b^2)
int N = 1000;
int i;
double phi; double r;
double phirect = atan(w/h);//Helps determine which of the 4 line segments we are on
ArrayList<Point> Ei;
ArrayList<Point> Ri;
for(i=0;i<N;i++)
{
//Construct ellipse
phi = 2PI * (double)i/N;
r = 1/sqrt(cos(phi)^2/a^2 + sin(phi)^2/b^2);
Ei.add(new Point(r * cos(phi),r * sin(phi));
//Construct Rectangle (It's hard)
if(phi > 2Pi - phirect || phi < phirect)
{Ri.add(new Point(w/2,w/2 * tan(phi)));}
else if(phi > phirect)
{Ri.add(new Point(h/2 * tan(phi),h/2));}
else if(phi > PI-phirect)
{Ri.add(new Point(-w/2,-w/2 * tan(phi)));}
else if(phi > PI+phirect)
{Ri.add(new Point(-h/2,-h/2 * tan(phi)));}
}
}
Arraylist<Point> Ti;
int transitionpoints = 100;
double v;
int j;
for(j=0;j<transitionpoints;j++)
{
//This outer loop represents one instance of the object. You should probably clear the picture here. This probably belongs in a separate function but it would take awhile to write it that way.
for(i=0;i<N;i++)
{
v = (double)1 * j/(N-1);
Ti = new Point(v * Ri.get(i).getx + (1-v) * Ei.get(i).getx,
v * Ri.get(i).gety + (1-v) * Ei.get(i).gety);
if(i != 0)
drawline(Ti,Tiold);
Tiold = Ti;
}
}
非常好 - 你能添加一些代碼片段嗎? –
剛剛添加。我還沒有測試過它。 –
哇 - 我希望我可以添加更多的加號 - 非常有價值的答案! –
- 1. 將圓角矩形變換爲圓形
- 2. Java:如何用導入的PNG文件替換「橢圓形」或「矩形」圖形?
- 3. 在矩形內創建橢圓/圓形
- 4. Java - getBounds2D,橢圓矩形碰撞
- 5. 繪製矩形和橢圓
- 6. 矩形/橢圓程序
- 7. 如何將方形圖像轉換爲橢圓形
- 8. 如何將矩形選擇轉換爲圓形(在網格中)
- 9. 從矩形中繪製橢圓
- 10. 將變換矩陣應用於圓形
- 11. 如何在運行時變形橢圓
- 12. Java錯誤?爲什麼要繪製矩形而不是橢圓?
- 13. 爲什麼matplotlib將我的圓形繪製爲橢圓形?
- 14. 核心圖形,如何繪製橢圓透明孔的矩形?
- 15. 如何檢測橢圓是否與另一個橢圓/矩形碰撞
- 16. 轉換多邊形橢圓
- 17. 橢圓形背景漸變
- 18. 將橢圓繪製到C中的矩形中
- 19. 在Java中移動橢圓和橢圓形狀?
- 20. 使用「橢圓形」漸變爲IE-9
- 21. 如何競爭將矩形變換爲梯形所需的變換矩陣?
- 22. OpenGL圓形繪圖變橢圓
- 23. css border-radius圓形變爲橢圓形,位置:絕對
- 24. Pyqtgraph:如何繪製橢圓或圓形
- 25. 創建同心矩形和橢圓的Java程序?
- 26. 將位置置信度橢圓轉換爲協方差矩陣
- 27. 變形圈到橢圓形在openscad
- 28. 將矩形UIImageView變成一個圓形
- 29. 在GEF eclipse編輯器中繪製橢圓和圓角矩形
- 30. 將圓轉換爲橢圓,以便從橢圓邊框計算點的距離
你需要展示你試過的東西 –