Показать сообщение отдельно
Старый 03.11.2011, 01:30   #11
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений
(для 271 пользователей)
поворот картинки

Сообщение от Romanzes Посмотреть сообщение
Файл MathFP.java взял с какого-то сайта (между прочим, этот же самый файл, только немного переработанный, используется и в MP).
а я не знал ..( пришлось помучаться:

// значения косинусов * 65535
    
public static final int[] cos_table_180 =
    {
        
65536654706547065404653396527365142650116488064684,
        
64487642906409463832635696324262980626526232461931,
        
61538611456075160293598345937558851583925780257278,
        
56754561645557454919543295367353018522975164250921,
        
50200494144869347906471204633345481446304384342991,
        
42074412224030439387384693755236634356513466833751,
        
32768317193073629687287042765626607255592451023461,
        
22413212992025019136180221690815794146801356512451,
        
1133710223910979296815570145213407222811140,
        -
1114, -2228, -3407, -4521, -5701, -6815, -7929, -9109, -10223,
        -
11337, -12451, -13565, -14680, -15794, -16908, -18022, -19136, -20250, -21299,
        -
22413, -23461, -24510, -25559, -26607, -27656, -28704, -29687, -30736, -31719,
        -
32702, -33751, -34668, -35651, -36634, -37552, -38469, -39387, -40304, -41222,
        -
42074, -42991, -43843, -44630, -45481, -46333, -47120, -47906, -48693, -49414,
        -
50200, -50921, -51642, -52297, -53018, -53673, -54329, -54919, -55574, -56164,
        -
56754, -57278, -57802, -58392, -58851, -59375, -59834, -60293, -60751, -61145,
        -
61538, -61931, -62324, -62652, -62980, -63242, -63569, -63832, -64094, -64290,
        -
64487, -64684, -64880, -65011, -65142, -65273, -65339, -65404, -65470, -65470,
        -
65536
    
};

    
// вычисление косинуса, если кто не догадался ..)
    
public static int cos(int a) {
        
int c 0;
        
%= 360;
        
= (0) ? 360 a;
        if (
180) {
            
= -cos_table_180[180];
        } else {
            
cos_table_180[a];
        }
        return 
c;
    }

    
// вычисление тангенса
    // ...шутю
    
public static int sin(int a)
    {
        return 
cos(90 a);
    }

    
// хранение промежуточных результатов:
    // результат поворота
    
private int tx 0;
    private 
int ty 0;
    
// центр битмапа
    
private int cx 0;
    private 
int cy 0;
    
// синус, косинус
    
private int sa 0;
    private 
int ca 0;

    
// возвращает большее из 2 чисел
    
public static int max(int aint b) {
        return (
b) ? b;
    }

    
// возвращает меньшее из 2 чисел
    
public static int min(int aint b) {
        return (
b) ? b;
    }

    
// возвращает большее из 4 чисел
    
public static int max(int aint bint cint d) {
        return 
max(ab) > max(cd) ? max(ab) : max(cd);
    }

    
// возвращает меньшее из 4 чисел
    
public static int min(int aint bint cint d) {
        return 
min(ab) < min(cd) ? min(ab) : min(cd);
    }

    
// поворот точки на угол вокруг центра
    // [cx, cy] - центр
    
private void xyRotate(int xint y) {
      
int dx cx;
      
int dy cy;
      
tx cx + ((dx ca) >> 16) - ((dy sa) >> 16);
      
ty cy + ((dx sa) >> 16) + ((dy ca) >> 16);
    }

    
// возвращает повернутую картинку
    
public static Image imgrotate(int angle) {
        
sa sin(angle);
        
ca cos(angle);
        
int x 0;
        
int y 0;
        
int w pwid;
        
int h phei;
        
cx + (>> 1);
        
cy + (>> 1);
        
xyrotate(xy);
        
int x1 tx;
        
int y1 ty;
        
xyrotate(1y);
        
int x2 tx;
        
int y2 ty;
        
xyrotate(11);
        
int x3 tx;
        
int y3 ty;
        
xyrotate(x1);
        
int x4 tx;
        
int y4 ty;
        
tx min4(x1x2x3x4);
        
ty min4(y1y2y3y4);
        
int neww max4(x1x2x3x4) - tx 1;
        
int newh max4(y1y2y3y4) - ty 1;
        
int l neww newh;
        
int[] bmp2 null;
        
bmp2 = new int[l];
        
int dx = (neww w) >> 1;
        
int dy = (newh h) >> 1;
        for(
0newwx++)
        for(
0newhy++) {
            
xyrotate(dxdy);
            
int i neww;
            if ((
>= 0) && (l)) {
                
bmp2[i] = point(txty);
            }
        }
        return 
Image.createRGBImage(bmp2newwnewhtrue);
    } 
зато не требует каких либо библиотек
__________________
to be or not to be - it's not a question!
2b or not 2b = ff

Последний раз редактировалось barsunduk, 05.11.2011 в 13:31.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Romanzes (07.11.2011)