|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Ilia Kantor 2:5020/1815.6 08 Dec 2001 22:15:26 To : All Subject : FAQ --------------------------------------------------------------------------------
=== Cut ===
îé öèôpû }
x:=a[i];
{ ñäâèã - îñâîáîæäåíèå ìåñòà â êîíöå k-îé ãpyïïû }
for j:=i downto b[k]+1 do a[j]:=a[j-1];
{ çàïèñü â êîíåö k-îé ãpyïïû }
a[b[k]]:=x;
{ ìîäèôèêàöèÿ k-ãî èíäåêñà è âñåõ áîëüøèõ }
for j:=k to P-2 do b[j]:=b[j]+1;
end;
end;
Ðåçyëüòàòû òpàññèpîâêè ïpîãpàììíîãî ïpèìåpà 3.15 ïpè P=10
è
D=4 ïpåäñòàâëåíû â òàáëèöå 3.9.
Òàáëèöà 3.9
ÚÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³öèôpà³ ñîäåpæèìîå ìàññèâîâ a è b ³
ÃÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³èñõ. ³ 220 8390 9524 9510 462 2124 7970 4572 4418 1283 ³
ÃÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 1 ³ 220 8390 9510 7970 462 4572 1283 9524 2124 4418 ³
³ ³ ÀÄÄÄÄÄÄÄÄ0ÄÄÄÄÄÄÄÄÙ ÀÄÄÄ2ÄÄÄÙ ÀÄ3Ù ÀÄÄÄ4ÄÄÄÙ ÀÄ8Ù ³
³ ³ b=(5,5,7,8,10,10,10,10,11,11) ³
ÃÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 2 ³ 9510 4418 220 9524 2124 462 7970 4572 1283 8390 ³
³ ³ ÀÄÄÄ1ÄÄÄÙ ÀÄÄÄÄÄÄ2ÄÄÄÄÄÙ ÀÄ6Ù ÀÄÄÄ7ÄÄÄÙ ÀÄ8Ù ÀÄ9Ù ³
³ ³ b=(1,3,6,6,6,6,7,9,10,11) ³
ÃÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 3 ³ 2124 220 1283 8390 4418 462 9510 9524 4572 7970 ³
³ ³ ÀÄ1Ù ÀÄÄÄ2ÄÄÄÙ ÀÄ3Ù ÀÄÄÄ4ÄÄÄÙ ÀÄÄÄÄÄÄ5ÄÄÄÄÄÙ ÀÄ9Ù ³
³ ³ b=(1,2,4,5,7,10,10,10,10,11) ³
ÃÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 4 ³ 220 462 1283 2124 4418 4572 7970 8390 9510 9524 ³
³ ³ ÀÄÄÄ0ÄÄÄÙ ÀÄ1Ù ÀÄ2Ù ÀÄÄÄ4ÄÄÄÙ ÀÄ7Ù ÀÄ8Ù ÀÄÄÄ9ÄÄÄÙ ³
³ ³ b=(3,4,5,5,7,7,7,8,9,11) ³
ÀÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Q12. 3D -> 2D
A1. (Sergey Melnikov 2:5020/1065.18)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Âîò îäèí èç ñïîñîáîâ:
Èç (x,y,z) â (u,v):
U = X + Y*cos(a)
V = Z + Y*sin(a)
ãäå a - yãîë, êîòîpûé áåpåòñÿ îáû÷íî â 45ø.
èëè òàê:
U = X + Z / 1.4
V = Y + Z / 1.4
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
A2. (Ivan Voroshilin 2:5079/51.3)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Hy ýòî ïpîñòî... Ñìîòpÿ êàêyþ òû ïpîåêöèþ õî÷åøü...
Äëÿ ïåpñïåêòèâíîé:
sx=MaxScreenx/2+(x*Zoff/(z+Zoff));
sy=MaxScreeny/2-(y*Zoff/(z+Zoff));
Ãäå Zoff pàññòîÿíèå îò íàáëþäàòåëÿ (íàïpèìåp -256);
À äëÿ ïàpàëåëüíîé ïpîñòî îòñåêàåøü êîîpäèíàòy z, òî åñòü:
sx=MaxScreenx/2+x;
sy=MaxScreeny/2-y;
sx,sy - ñïpîåöèpîâàíûå êîîpä-òû òî÷êè íà 2d-ýêpàí(ïëîñêîñòü).
x,y,z - êîîp-òû òî÷êè 3d ïpîñòpàíñòâå.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
A3. (Vlad Borodin 2:5004/4.6)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Àëãîpèòì çàâèñèò îò òîãî ÷òî òåáå íàäî è êàê y òåáÿ âñå
yñòpîåíî.
Ñàìûé ïpîñòîé âàpèàíò ýòî êîãäà ýêpàí pàñïîëîæåí â íà÷àëå
ñèñòåìû êîîpäèíàò,
ò.å. òî÷êà (0,0,0) - ýòî ëèáî òî÷êà (0,0) ëèáî (320,200) è ò.ï.
Äàëåå åñòü äâà âèäà ïpîýêòèpîâàíèÿ: öåíòpàëüíàÿ è ïàpàëëåëüíàÿ
ïpîåêöèè.
Ïpè ïàpàëëåëüíîé ïpîñòî îòápàñûâàåøü Z êîîpäèíàòy è âñå.
Ïpè öåíòpàëüíîé çàäàåòñÿ ôîêyñ (íàïpèìåp òî÷êà (0,0,-100))
çàòåì âûñ÷èòûâàåòñÿ
ôîpìyëà ïpÿìîé ïpîõîäÿùåé ÷åpåç äàííyþ òî÷êy è ôîêyñ, è ïîòîì
ïpîñòî
âû÷èñëÿåòñÿ
ìåñòî ïåpåñå÷åíèÿ ïpÿìîé ñ ïëîñêîñòüþ z=0.
À âîîáùå îáùèé âàpèàíò ýòî êîãäà ýêpàí pàñïîëîæåí ãäå-òî è
òîãäà îí èìååò
ñîáñòâåííyþ ñèñòåìy êîîpäèíàò (îíà ñîñòîèò èç íåêîòîpîãî
îpòîpèïåpà çàäàþùåãî
ïëîñêîñòü è íîpìàëü ê íåé) è íàäî ñíà÷àëà ïåpåâåñòè äàííyþ
òî÷êy èç îáû÷íîé
ñèñòåìû êîîpäèíàò â ýêpàííyþ (ýòî äåëàåòñÿ yìíîæåíèåì ìàòpèöû
îápàòíîé ê
ìàòpèöå
ïåpåõîäà íà âåêòîp, îïpåäåëÿåìûé äàííîé òî÷êîé) - ïîëy÷àåì
ïåpâûé ñëy÷àé. Âîò è
âñå! Îñòàëîñü òîëüêî ôîpìyëêè ñîñòàâèòü - à ýòî yæå ïpîñòî, íî
íàäî ïpàâèëüíî
çàäàòü ýêpàííyþ ñèñòåìy êîîpäèíàò è ôîêyñ, à òî ìîæåò âñå
ïpîìàñøòàáèpîâàòüñÿ
èëè êpèâî, íååñòåñòâåííî pàñòÿíyòüñÿ â ïpîñòpàíñòâå.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Q13. Àëãîpèòì Z-buffer
A1. (Michail Svarichevsky 2:452/30.31)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Hàçíà÷åíèå: Êîppåêòíîå îòîápàæåíèå 3d ïîëèãîíîâ(â òîì ÷èñëå è
ïåpåñåêàþùèõñÿ)
Çäåñü - mass - ñîáñòâåííî Z-Buffer
X,Y,Z êîîpäèíàòû âûâîäèìîé òî÷êè.
void putpix(int X,int Y,int Z)
{
if(Z<mass[X][Y])
{
mass[X][Y]=Z;
putpixel(X,Y,Z);
}
}
 íà÷àëå ïpîãpàììû èíèöèàëèçèpyåøü mass áîëüøèì ÷èñëîì(íàïpèìåp
10000000000)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
A2. (Alexandr Ivanov 2:453/33.10)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Êîãäà ïpîpèñîâûâàåøü íà ýêpàíå ïëîñêîñòè, òî êàæäîé òî÷êå
èçîápàæåíèÿ íà ýêpàíå ñîîòâåòñòâyåò 3-è êîîpäèíàòû X,Y - ýòî
ñîáñòâåííî êîîpäèíàòû òî÷êè íà ýêpàíå, è Z ñîñòàâëÿþùàÿ. Òàê âîò
êîîpäèíàòy Z äëÿ êàæäîé òî÷êè ìû ïîìåùàåì â ìàññèâ pàçìåpîì ñ
ýêpàí, è êàæäûé pàç, êîãäà âûâîäèì î÷åpåäíyþ òî÷êy, ÷òîáû
yçíàòü, áëèæå îíà ê íàì èëè äàëüøå, ïpîñòî ïpîâåpÿåì Z áyôôåp â
å¸ êîîpäèíàòàõ (X,Y) è åñëè òàì çíà÷åíèå ìåíüøå (Z âîçpàñòàåò
"âãëyáü" ýêpàíà) ÷åì Z êîîpäèíàòà òåêyùåé òî÷êè, òî ýòy òî÷êy íå
âûâîäèì, èíà÷å âûâîäèì òî÷êy è â Z - áyôåp ïèøåì å¸ Z
ñîñòàâëÿþùyþ.
Êîpî÷å, Z - áyôôåp ñîäåpæèò "påëüåô" èçîápàæåíèÿ. :)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Q14. Àëãîpèòì "Ïëàâàþùèé ãîpèçîíò"
A. (Anton Lobastoff 2:5000/7.84)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Ôyíêöèÿ? òèïà y=F(x,z)? Òîãäà - "ïëàâàþùèì ãîpèçîíòîì" åÿ.
Âêpàòöå:
Âûäåëÿåòñÿ 2 ìàññèâà pàçìåpíîñòüþ = ÷èñëy òî÷åê ïî ãîpèçîíòàëè
- âåpõíèé è
íèæíèé ãîpèçîíòû. âåpõíèé èíèöèàëèçèpyåòñÿ ìèíèìàëüíî âîçìîæíûì
çíà÷åíèåì,
íèæíèé - ñîîòâ. ìàêñèìàëüíî âîçìîæíûì.
1. Öèêë ïî Z
2. Öèêë ïî X
y=F(x,z)
if( y > âåpõíèé[x] || y < íèæíèé[x] ) { pèñyåì îíyþ òî÷êy }
âåpõíèé[x]=max(âåpõíèé[x],y)
íèæíèé[x]=min(íèæíèé[x],y)
Âîçìîæíû âàpèàöèè íà òåìy ñîåäèíåíèÿ òî÷åê ëèíèÿìè è
ïåpåêpåñòíîé øòpèõîâêè.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Q15. Çàêpàñêà Ãypî è Ôîíãà
A. (Andrew Usachov 2:5100/87)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Ãypî: äëÿ êàæäîé òî÷êè ìíîãîyãîëüíèêà âû÷èñëÿåòñÿ íîpìàëü, ñ
åå ïîìîùüþ - ÿpêîñòü òî÷êè. ×òîáû âû÷èñëèòü ÿpêîñòü â
ïpîèçâîüëíîé òî÷êå ìíîãîyãîëüíèêà, ÿpêîñòè èíòåpïîëèpyþòñÿ
ñíà÷àëà âäîëü ñòîpîí ìíîãîyãîëüíèêà, à ïîòîì ìåæäy äâyìÿ òî÷êàìè
íà pàçíûõ ñòîpîíàõ.
Ôîíã: èíòåpïîëèpyþòñÿ ñàìè íîpìàëè, ÿpêîñòü âû÷èñëÿåòñÿ â
êàæäîé êîíêpåòíîé òî÷êå.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Q15.1. À êàê âû÷èñëèòü ýòy íîpìàëü, à çàòåì ÿpêîñòü?
A. (Andrew A Aksyonoff 2:5036/5.47)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Hîpìàëü - çàpàíåå ïpîñyììèpîâàâ íîpìèpîâàííûå (ïpèâåäåííûå ê
äëèíå 1 ;)) íîpìàëè äëÿ êàæäîé ãpàíè, ê êîòîpîé ïpèíàäëåæèò
äàííàÿ âåpøèíà (à íå òî÷êà, êñòàòè) è ïîâåpíyâ ýòîò pre-computed
påçyëüòàò yæå â ïpîöåññå îòpèñîâêè êàê íàäî.
ßpêîñòü - ïîñ÷èòàâ yãîë ìåæäy âåêòîpîì íîpìàëè è âåêòîpîì
ñâåòà. Ñêàëÿpíîå ïpîèçâåäåíèå ïîäåëèòü íà äëèíy è âçÿòü îò ýòîãî
âñåãî àpêêîñèíyñ.
+ Origin: [Team ÑÀÏÐ] (2:462/42)
Ä [55] RU.ALGORITHMS (2:5010/207.3) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
RU.ALGORITHMS Ä
Msg : 6 èç 155 +93
Îò : Alexander Dedusenko 2:462/42 26
ñåíòÿáðÿ 00, 00:
Êîìó : All
Òåìà : FAQ [3/3]
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Hi, All.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Q16. Àëãîpèòì ïîñòpîåíèÿ ìíîæåñòâà ìàíäåëüápîòà
A. (Sergey Potapenko 2:463/308.9)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Âîò äåpæè. Ïpîãpàììêà ìàëåíüêàÿ è ÿ äyìàþ äîñòàòî÷íî ïîíÿòíàÿ.
Ïpàâäà påìêè ÿ íåñòàâèë. Êîãäàòî ÿ ÷åñòíî ñîäpàë å¸ èç êàêîãî-òî
æypíàëà.
=== Hà÷àëî fractal.c ===
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#include <conio.h>
#define COLOR 100
#define MAS 0.9
typedef struct complex Complex;
void Sqr(Complex *z)
{
Complex Fool=*z;
z->x=Fool.x*Fool.x-Fool.y*Fool.y;
z->y=2*Fool.x*Fool.y;
}
char GetColor(Complex zInit)
{
Complex z=zInit;
int Color=COLOR;
while(z.x*z.x+z.y*z.y <= 4 && Color)
{
Sqr(&z);
z.x+=zInit.x;
z.y+=zInit.y;
Color--;
}
return Color;
}
void DrawMandelSet(double xMin,double xMax,double yMin,double
yMax)
{
double xInc,yInc;
Complex zInit;
int y,x;
char far *Screen=(char far *)MK_FP(0xa000,0);
zInit.y=yMin;
xInc=(xMax-xMin)/320;
yInc=(yMax-yMin)/200;
for(y=0;y<200;y++,zInit.y+=yInc)
{
zInit.x=xMin;
for(x=0;x<320;x++,zInit.x+=xInc,Screen++)
*Screen=GetColor(zInit);
}
}
void main(void)
{
_AX=0x13;geninterrupt(0x10);
DrawMandelSet(-2*MAS,1*MAS,-1*MAS,1*MAS);
getch();
_AX=0x03;geninterrupt(0x10);
}
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Q17. Îöåíî÷íàÿ ôyíêöèÿ äëÿ êpåñòèêîâ-íîëèêîâ (ïÿòü â pÿä)
A1. (Serv Ponomarev 2:5020/1564.7)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Èòàê ñyòü îöåíî÷íîé ôyíêöèè - îöåíèòü íàñêîëüêî âûãîäíî
íàì ïîñòàâèòü â
äàííyþ òî÷êy ñâîþ ôèøêy. Î÷åâèäíî íàì áûâàåò âûãîäíî ýòî
ñäåëàòü ëèáî äëÿ
ñîçäàíèÿ ñâîåãî äëèííîãî pÿäà, ëèáî äëÿ áëîêèpîâàíèÿ äëèííîãî
pÿäà ïpîòèâíèêà.
Òàêæå ñëåäyåò y÷åñòü, ÷òî áûâàåò âûãîäíåå
ïpîäîëæèòü/çàáëîêèpîâàòü
áîëüøîå êîëè÷åñòâî íå î÷åíü äëèííûõ pÿäîâ, âìåñòî îäíîãî
äëèííîãî.
Ôèøêà, ïîñòàâëåííàÿ â äàííyþ ïyñòyþ êëåòêy ìîæåò îäíîâpåìåííî
y÷àñòâîâàòü â ïpîäîëæåíèè äî 8 pÿäîâ (2 ãîpèçîíòàëüíûõ, 2
âåpòèêàëüíûõ è 4 äèàãîíàëüíûõ).
Ñ÷èòàåì, ÷òî ìû ïîñòàâèëè ôèøêy â äàííîå ìåñòî. Òîãäà ìîæíî
ñîñ÷èòàòü äëèííû êàæäîãî èç íàøèõ pÿäîâ, âêëþ÷àþùèõ ýòy ôèøêy.
Ââåäåì êîýô. M = sum(Ki). Ãäå Ki - êîýô. âàæíîñòè i-ãî pÿäà.
Ò.ê. íàïpàâëåíèå pÿäà íàì áåçpàçëè÷íî, òî Ki çàâèñèò òîëüêî îò
äëèííû pÿäà.
Äëÿ ïpîñòîòû ìîæíî âçÿòü Ki=3*äëèííà pÿäà.
Ïîëy÷åííûé êîýô. Ì - îöåíêà òîé âûãîäû, êîòîpyþ ìû ïîëy÷èì,
ïîñòàâèâ â äàííyþ êëåòêy ñâîþ ôèøêy.
Äàëåå ïpåäïîëîæèì, ÷òî ìû íå ïîñòàâèëè â äàííyþ êëåòêy ôèøêy,
è ñîîòâåòñòâåííî ýòî ñäåëàë ïpîòèâíèê.
Àíàëîãè÷íî ñ÷èòàåì êîýô. N - îöåíêà âûãîäû, ïîëy÷àåìîé
ïpîòèâíèêîì.
Ñëîæèâ Ì è N ñ íåêèìè îöåíî÷íûìè êîýô. ïîëy÷èì îêîí÷àòåëüíyþ
îöåíêy:
F = M + Q*N.
×èñåë ÿ íå ïîìíþ, ïîýòîìy ñ âû÷èñëåíèåì Ki ñòîèò ïîèãpàòüñÿ,
âîçìîæíî åãî ñòîèò çàìåíèòü ñòåïåííîé ôyíêöèåì (íî ñ íåáîëüøèì
îñíîâàíèåì!).
Êîýô. Q - ïîêàçàòåëü àãpåññèâíîñòè àëãîpèòìà, åñëè îí áîëüøå 1
àëãîpèòì ñèäèò â ãëyõîé îáîpîíå; ìåíüøå 1 - àëãîpèòì ïûòàåòñÿ
çàõâàòèòü èíèöèàòèây.
Ïî ìîåìy ìíåíèþ, Q ñëåäyåò ápàòü ìåíüøå 1.
Èç ôè÷, yñëîæíÿþùèõ æèçíü ïpîòèâíèêy, ìîæíî äîáàâèòü ôàêòîp
ñëy÷àéíîñòè, äëÿ âàpèàíòîâ õîäà ñ pàâíûìè, èëè áëèçêèìè,
îöåíî÷íûìè ôyíêöèÿìè.
Òåîpåòè÷åñêè ïpîòèâ òàêîãî àëãîpèòìà ìîæåò ñyùåñòâîâàòü
âûèãpûøíàÿ ñòpàòåãèÿ, íî ÿ åå íå íàøåë.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
A2. (Konstantin Gilyov 2:5000/72)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Åñëè på÷ü èäåò î êëàññè÷åñêèõ êpåñòèêàõ-íîëèêàõ, íà ïîëå 3õ3,
òî òàì âñå ñêy÷íî è òpèâèàëüíî. Èãpà ãàpàíòèpîâàíî çàêàí÷èâàåòñÿ
íè÷üåé, åñëè îäèí èç ïàpòíåpîâ ñîâñåì yæ ãëyïûõ õîäîâ íå äåëàåò,
è áåñïpîèãpûøíûå ñòpàòåãèè äëÿ îáîèõ ñîâåpøåííî î÷åâèäíû.
Åñëè æå òû èìååøü â âèäy èãpy "ãî-ìîêè" (êpåñòèêè-íîëèêè íà
íåîãpàíè÷åííîì ïîëå, âûèãpûâàåò ïîñòàâèâøèé 5 øòyê â pÿä ïî
ãîpèçîíòàëè, âåpòèêàëè èëè ïîä yãëîì 45 ãpàäyñîâ), òî åñòü ñ ÷åì
ïîpàçâëå÷üñÿ. Ïîìíèòñÿ, ÿ ïèñàë ïpîãpàììêy, êîòîpyþ ñàì æå ñ
áîëüøèì òpyäîì ïîáåæäàë, õîòÿ èãpàë íåñëàáî - â òypíèpàõ ñ
ëþäüìè ëèäèpîâàë äîâîëüíî yâåpåííî :)
Îñíîâíàÿ èäåÿ îöåíêè áûëà ïpèìåpíî òàêàÿ: ïpîñìàòpèâàåì âñå
íåïyñòûå îòpåçêè äëèíû 5 è ñyììèpyåì îöåíêè äëÿ íèõ. Â
ïpîñòåéøåì âàpèàíòå ïpîñòî ïpèïèñûâàåì íåêîòîpûé âåñ êàæäîé
âîçìîæíîé êîìáèíàöèè êpåñòèêîâ, íîëèêîâ è ïyñòûõ êëåòîê â
îòpåçêå (èõ âñåãî 243, âêëþ÷àÿ ñîâñåì ïyñòîé). Åñëè yäà÷íî
ïîäîápàòü ýòè âåñà, òî ïpîãpàììêà yæå äàæå â òàêîì ïpîñòåéøåì
âàpèàíòå äîâîëüíî çàáàâíî èãpàåò - ñòîèò ÷y-÷yòü çàçåâàòüñÿ, è
íå ïîñòpîèòü êàêyþ-íüòü ëîâyøêy â ñàìîì íà÷àëå, êàê ìîæíî yæå è
ñäàâàòüñÿ (âîçüìåò "èçìîpîì", y æåëåçÿêè-òî âíèìàíèå íå
îñëàáåâàåò è íå pàññåèâàåòñÿ ñî âpåìåíåì, â îòëè÷èå îò ÷åëîâåêà
:))
Ñyùåñòâåííî yñèëèòü èãpy ïpîãpàììû ìîæíî, åñëè y÷åñòü â
îöåíêàõ ïåpåñå÷åíèå íà ïyñòîé êëåòêå îòpåçêîâ, çàíÿòûõ îäíèì
èãpîêîì (ñîáñ-íî, âñå ëîâyøêè èìåííî íà òàêèõ ïåpåñå÷åíèÿõ è
ñòpîÿòñÿ). Êpîìå òîãî èìååò ñìûñë yâåëè÷èâàòü ãëyáèíy ïpîñìîòpà
äëÿ òàê íàçûâàåìûõ ôîpñèpîâàííûõ õîäîâ (êîãäà â êàêîì-òî îòpåçêå
yæå ïîñòàâëåíî 4 êpåñòèêà è ïÿòàÿ êëåòêà ïyñòàÿ, èëè êîãäà
ïåpåñåêàþòñÿ â ïyñòîé êëåòêå äâà îòpåçêà ïî òpè êpåñòèêà).
Êàñàòåëüíî îïòèìèçàöèè - ñîâåpøåííî î÷åâèäíî, ÷òî èíòåpåñyåò
íå àáñîëþòíàÿ âåëè÷èíà ýòîé îöåíêè, à òîëüêî åå èçìåíåíèå îò
ïpåäïîëàãàåìîãî õîäà, à íà ýòî èçìåíåíèå íåïîñpåäñòâåííî âëèÿþò
òîëüêî 20 îòpåçêîâ, ïpîõîäÿùèõ ÷åpåç êëåòêy ýòîãî ñàìîãî õîäà, è
êîñâåííî åùå íåêîòîpîå êîëè÷åñòâî îòpåçêîâ â íåáîëüøîé
îêpåñòíîñòè. Êàê ýôôåêòèâíî õpàíèòü èíôîpìàöèþ î òåêyùåì
ñîñòîÿíèè èãpîâîãî ïîëÿ, ÷òîáû íå äåëàòü äypíîé pàáîòû - ýò
îòäåëüíàÿ ïåñíÿ :)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
=== Cut ===
/\/ Èñêðåííå âàø, Èëüÿ \/\
--- GoldEd 3.00.Alpha4+
* Origin: http://algolist.da.ru - Ìèð Àëãîðèòìîâ (2:5020/1815.6)
Âåðíóòüñÿ ê ñïèñêó òåì, ñîðòèðîâàííûõ ïî: âîçðàñòàíèå äàòû óìåíüøåíèå äàòû òåìà àâòîð
Àðõèâíîå /ru.algorithms/39463c1282fc.html, îöåíêà èç 5, ãîëîñîâ 10
|