3 เหตุผลว่าทำไม่อยากเขียนเกมต้องตั้งใจเรียนคณิตศาสตร์(ตอนที่ 1) 

3 เหตุผลว่าทำไม่อยากเขียนเกมต้องตั้งใจเรียนคณิตศาสตร์(ตอนที่ 1)





โดย expert-programming-tutor.com

รับสอนเขียนโปรแกรมคอมพิวเตอร์ 0853507540



EPT


เกมเป็นเป้าหมายหลักของคนเรียนเขียนโปรแกรมคอมพิวเตอร์บางส่วน เพราะเกมมีความสนุก และน่าสนใจในตัวมันเอง ไม่เพียงแต่เด็กๆเท่านั้นที่ชอบเกมผู้ใหญ่หลายคนก็ชอบ ยิ่งในปัจจุบันที่ เกมไม่ได้มีเฉพาะใน computer เครื่องใหญ่ๆ อย่างเดียวใน มือถือและ tablet ก็เต็มไปด้วยเกม มีผู้ใหญ่และเด็กหลายคนถามผมว่าอยากเขียนเกมเป็นต้องรู้อะไรบ้าง ก่อนจะไปถึงคำตอบนั้น เราจะมาดูเหตุผลก่อนว่า ทำไมอยากเรียนเขียนเกม (แบบเจาะลึก สไตล์ EXPERT-PROGRAMMING-TUTOR.com )ต้องตั้งใจเรียนเลข














เกมคอมพิวเตอร์คือ software ที่ทำหน้าที่ให้ความสนุกกับคนเล่น โดยส่วนใหญ่จะเป็นการจำลองสถานการณ์ ทั้งจากโลกจริง หรือจากโลกในจินตนาการ เปรียบเหมือนการสร้างโลกสมมุติ ขึ้นมาเพื่อความสนุกสนาน ในเมื่อเป็นโลกสมมุติ หลายๆอย่างอาจจะไม่เหมือนในโลกจริง แต่กฏบางอย่างยังต้องอยู่ เพื่อความสนุก เช่น โดนยิงต้องตาย ตกจากที่สูงต้องพลังลด ตาต้องสามารถมองเหตุวัตถุต่างๆ





แล้วคณิตศาสตร์เกี่ยวอะไร



1 Graphics


ระบบของ computer Graphics ในปัจจุบันมีสองระบบใหญ่ๆ

1 ray tracing (http://en.wikipedia.org/wiki/Ray_tracing_(graphics) ) เป็นการจำลองการตกกระทบของแสง ยังวัตถุและสะท้อนเข้าสู่ตา (กล้อง) นอกจากนี้ยังคำนวณ การตกกระทบการหักเหของแสงในวัตถุที่มีความหนาแน่นต่างกัน วิธีการนี้ใช้เวลา render นานมาก นิยมใช้ในอุตสาหกรรมภาพยนต์ และงานที่ต้องการความเหมือนจริงมากๆ













ซึ่งการเขียนโปรแกรมตรงนี้ต้องใช้ความรู้คณิตศาสตร์ เรื่อง vector , matrix , ระบบจำนวนจริง , ภาคตัดกรวย , ตรีโกณต์มิติ

ความรู้ฟิสิกส์ เรื่อง แสง ,การหักเหของแสงในตัวกลาง



2 การ Geometry transformวิธีเป็นวิธีที่ใช้ในเกม



หลักการคือ วัตถุต่างๆ เช่นหมี หมา กา ไก่ในเกม จะประกอบด้วย polygon หรือ รูปหลายเหลี่ยมเล็กๆประกอบกัน เช่น









กระต่ายstanford นี้ ประกอบด้วยสามเหลี่ยมเล็กๆจำนวนมากประกอบกัน ยิ่งสามเหลี่ยมมีขนาดเล็กเท่าไหร ก็ยิ่งสามารถ สร้างวัตถุที่ระเอียดเหมือนจริงได้มากเท่านั้น

polygon จะประกอบด้วยจุดยอดเรียกว่า vertex

ซึ่งจะนำมา transform โดยใช้ camera matrix (projective transform) ตามภาพ













หลังจากนี้ก็จะผ่านไปยังกระบวนการให้สี Shader ในที่นี้จะกล่าวถึงวิธีการของ ฟง







ซึ่งมีสูตรดังนี้













ซึ่งการเขียนโปรแกรมตรงนี้ต้องใช้ความรู้คณิตศาสตร์ เรื่อง vector , matrix , ระบบจำนวนจริง , ภาคตัดกรวย , ตรีโกณต์มิติ ,space



นอกจากนี้การเขียนเกมคอมพิวเตอร์ยัง มีเรื่องของ ระบบ AI (ปัญญาประดิษฐ์) ระบบ physics

ซึ่งยังไม่ได้กล่าวถึงในบทความนี้อีกด้วย แล้วโอกาศหน้าผมจะเขียนถึง AI ในเร็วๆนี้





เห็นไหมครับว่าการเรียนคณิตศาสตร์ไม่ใช่เรียนเพื่อเอาไปสอบอย่างเดียวฝาก บทความนี้ไว้เป็นแรงบันดาลใจในการเรียนเลขของเด็กๆม.ต้น ม.ปลายทุกคนครับ



ref.

http://www.gconsole.com/cgi-bin2/show.p ... mp;id=8803

http://homepages.inf.ed.ac.uk/rbf/CVonl ... node3.html

http://en.wikipedia.org/wiki/Phong_reflection_model


[ view entry ] ( 1832 views )   |  permalink  |  $star_image$star_image$star_image$star_image$star_image ( 2.5 / 89 )
การใส่ลายน้ำให้รูปพร้อมๆกันเยอะๆ 

การใส่ลายน้ำให้รูปพร้อมๆกันเยอะๆ



ลายน้ำหรือ watermark คือ ไอ้คำว่า expert-programming-tutor.com ในรูปนี้




เคยเป็นไหม อยากจะใส่ลายน้ำ ให้รูปพร้อมๆกันหลายๆ รูป แบบไม่ต้องมานั่งทำด้วยมือที่ละ file
บางคนอาจจะขยัยแต่สำหรับคนขี้เกียจอย่างผมผมจึงเขียน code ขึ้นมาให้คอมพิวเตอร์ช่วยทำ

จึงขออธิบายวิธีการเป็น step แบบนี้
1 list รูปทุกรูปใน folder ที่เราต้องการ ก่อน



private void button1_Click(object sender, EventArgs e)
{
ProcessDirectory("D:\\JAVA_งานน้องตี้\\HTMLPad\\img");
}


public void ProcessDirectory(string targetDirectory)
{
// Process the list of files found in the directory.
string[] fileEntries = Directory.GetFiles(targetDirectory);
foreach (string fileName in fileEntries)
ProcessFile(fileName);

// Recurse into subdirectories of this directory.
string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
foreach (string subdirectory in subdirectoryEntries)
ProcessDirectory(subdirectory);
}



โดยใน code นี้จะเป็นการ recursive ไปตาม folder ต่างๆที่เป็น folder ลูกของ folder ตั้งต้นของเรา

แล้ว เรียก function ProcessFile

2 step ที่สอง คือ




public static void ProcessFile(string path)
{
Console.WriteLine("Processed file '{0}'.", path);
Bitmap bmp = (Bitmap)(Bitmap.FromFile(path));
Graphics gg = Graphics.FromImage(bmp);

gg.TranslateTransform(20, 20);
gg.RotateTransform((float)( 180.0 / Math.PI * Math.Atan2(bmp.Height , bmp.Width ) ));

SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 255));
gg.CompositingQuality = CompositingQuality.GammaCorrected;
gg.DrawString("expert-programming-tutor.com Tel. 0853507540", new Font("Ariel", 25, FontStyle.Regular), semiTransBrush, 0, 0);


gg.Flush();

String path2 = path.Replace("D:\\JAVA_งานน้องตี้\\HTMLPad\\img\\", "D:\\JAVA_งานน้องตี้\\HTMLPad\\img2\\") ;
if (! Directory .Exists ( Path.GetDirectoryName (path2 ) ))
{
Directory.CreateDirectory(Path.GetDirectoryName(path2));
}
bmp.Save(path2, System.Drawing.Imaging.ImageFormat.Jpeg);
}



สร้าง Graphics จาก Bitmap
translate
rotate
ไปยังตำแหน่งที่ต้องการ

พิมพ์ข้อความที่ต้องการลงไป

save รูปไปยัง path ใหม่ที่ต้องการ


ความรู้ที่ใช้สำหรับเรื่องนี้ (การใส่ watermark แบบ อัตโนมัต)
1 LOOP
2 recursive
3 Array
4 Graphics
5 การ search google หาวิธีใช้ transparent
6 การ translate และ การ rotate รูป



[ view entry ] ( 1239 views )   |  permalink  |  $star_image$star_image$star_image$star_image$star_image ( 3 / 1776 )
การดึงข้อมูลหุ้น จาก www.set.co.th แบบ อัตโนมันติ โดยใช้ C# 

การดึงข้อมูลหุ้น จาก www.set.co.th แบบ อัตโนมันติ โดยใช้ C#




เนื่องจาก คุณช้วงต้องการ code ตัวอย่าง การดึงข้อมูล หุ้นแบบ อัตโนมัต โดยใช้ C# ให้สามารถ ดึงได้ที่ละ หลายๆ หุ้นพร้อมๆ กัน ดังนั้น ผมจึงเขียนให้ สามารถ download ได้ที่

[ถ้าอยากได้ส่ง mail มาขอที่ ntprintf@gmail.com ]

ซึ่งในการนี้ เราใช้ HtmlAgilityPack เป็นตัวช่วยในกา parse XML ครับ
และใช้ HttpWebRequest ในการดึงข้อมูลครับ

ตัวอย่าง หน้าจอ







โดยสามารถ ใส่ตัวย่อหุ้น และ load ได้อย่างอัตโนมัติ ครับ
เราชื่อว่า ถ้าเรียน CS 102 แบบ มาเรียนอย่างต่อเนื่อง และ ทำการบ้านมาส่งทุกครั้งน่าจะ ทำ แนวๆนี้ได้

[ view entry ] ( 1418 views )   |  permalink  |  $star_image$star_image$star_image$star_image$star_image ( 2.9 / 1844 )
เขียนโปรแกรมจับตา โดยใช้ OPENCV 

เขียนโปรแกรมจับตา โดยใช้ OPENCV



link น่าสนใจ

http://www.youtube.com/watch?v=LHfUeyxhgvk

http://www.youtube.com/watch?v=JL3Gbb9aY0c


https://opencv-code.com/tutorials/eye-detection-and-tracking/


http://hackaday.com/2012/05/30/opencv-k ... -tracking/


[ view entry ] ( 2964 views )   |  permalink  |  $star_image$star_image$star_image$star_image$star_image ( 3 / 2549 )
การใช้ high Resolution Timer ด้วย c++ 


การใช้ high Resolution Timer ด้วย c++




#include <windows.h>
#include <stdio.h>
#include <conio.h>

typedef struct {
LARGE_INTEGER start;
LARGE_INTEGER stop;
} stopWatch;

class CStopWatch {

private:
stopWatch timer;
LARGE_INTEGER frequency;
double LIToSecs( LARGE_INTEGER & L) ;
public:
CStopWatch() ;
void startTimer( ) ;
void stopTimer( ) ;
double getElapsedTime() ;
};
double CStopWatch::LIToSecs( LARGE_INTEGER & L) {
return ((double)L.QuadPart /(double)frequency.QuadPart) ;
}

CStopWatch::CStopWatch(){
timer.start.QuadPart=0;
timer.stop.QuadPart=0;
QueryPerformanceFrequency( &frequency ) ;
}

void CStopWatch::startTimer( ) {
QueryPerformanceCounter(&timer.start) ;
}

void CStopWatch::stopTimer( ) {
QueryPerformanceCounter(&timer.stop) ;
}

double CStopWatch::getElapsedTime() {
LARGE_INTEGER time;
time.QuadPart = timer.stop.QuadPart - timer.start.QuadPart;
return LIToSecs( time) ;
}

#define n 200000

int main(int argc, char*argv[])
{
int x[n];
int j= 0;
int k = 1;
int l = 0;
int m=0;
CStopWatch timer;
for(int k=1;k<n/2;k=k*2)
{
timer.startTimer();
for(int l=0;l<20;l++)
{

for(int i=0;i< k;i++)
{
m=i;
while(m<n)
{
//printf("%d ",m);
x[m] = 7*x[m]*x[m];
m = (m + k ) ;
}
}
}
timer.stopTimer();
printf("\nk= %d --> \t%lf\n\n",k,timer.getElapsedTime());
}



}



http://expert-programming-tutor.com/

[ view entry ] ( 2947 views )   |  permalink  |  $star_image$star_image$star_image$star_image$star_image ( 3 / 2520 )

<<First <Back | 1 | 2 | 3 | 4 | 5 | Next> Last>>