560 likes | 719 Views
สวัสดี...ครับ. สัมมนา เรื่อง Filled Julia Set. เสนอ อาจารย์ พัชรี เลิศวิจิตรศิลป์ จัดทำโดย นาย พจศิษฏ์ ปัดภัย 42041004 อาจารย์ที่ปรึกษา ผศ. ประวัติ พัฒนิบูลย์. Filled Julia Set. แนะนำ
E N D
สัมมนาเรื่องFilled Julia Set เสนอ อาจารย์ พัชรี เลิศวิจิตรศิลป์ จัดทำโดย นาย พจศิษฏ์ ปัดภัย 42041004 อาจารย์ที่ปรึกษา ผศ. ประวัติ พัฒนิบูลย์
แนะนำ งานศิลปะส่วนใหญ่มักเริ่มมาจากรูปทรงเรขาคณิตพื้นฐาน เช่น เส้นตรง วงกลม วงรี รูปหลายเหลียม ภาคตัดกรวย ฯลฯ หรือแม้แต่ในธรรมชาติเองก็ตามก็ยังมีรูปทรงทางเรขาคณิต เช่น การโคจรรอบดวงอาทิตย์ของโลกเป็นรูปวงรีที่สวยงาม แต่มีอีกหลาย ๆสิ่งในธรรมชาติที่ซับซ้อนและไม่เป็นระเบียบ ซึ่งไม่สามารถใช้รูปทรงเรขาคณิตที่เราคุ้นเคยได้ เช่น รูปภูเขา ต้นไม้ สัตว์ ความซับซ้อนของทางเดินเลือดในร่างกายของมนุษย์ รวมทั้งโครงสร้างของระบบประสาท ดังนั้น Fractal จึงมามีบทบาทสำคัญในการสร้างรูปที่มีความซับซ้อน และสามารถประยุกต์นำไปใช้ประโยชน์ในทางคอมพิวเตอร์ได้ เช่น คอมพิวเตอร์กราฟิก
Fractal • คือ วัตถุหรือสิ่งที่ถูกมองทางเรขาคณิตซึ่งมีการเปลี่ยนแปลงทั้งขนาดและทิศทางอยู่ตลอดเวลาโดยมีการเปลี่ยนแปลงในลักษณะเดิมซ้ำ ๆ กันไปเรื่อย ๆ • ตัวอย่าง Fractal ในธรรมชาติ เช่น เส้นใยประสาทในสมอง เนื้อเยื้อประสาท บรอคโคลี ต้นไม้ ทางเดินเลือดในร่างกายของมนุษย์ ฯลฯ ซึ่งมีการเปลี่ยนแปลงในลักษณะเดิมซ้ำ ๆ กันไปเรื่อย ๆ
Iteration • กำหนดให้ F เป็นฟังก์ชัน เลือก x0 เป็นค่าเริ่มต้นแทนลงใน F แล้วได้ผลลัพธ์คือ x1 แล้วนำ x1 แทนลงใน F ทำซ้ำไป เรื่อย ๆ แสดงได้ดังนี้ F(x0) =x1 F(x1) = F(F(x0)) = x2 F(x2) = F(F(F(x0))) =x3 ….. F(xn-1) = F(…( F(x0)…) = xn …..
เราแทนการทำซ้ำ n ครั้ง ด้วย F n(x0) และเรียกว่า iterat อันดับที่ n ของ F เช่น F(F(x0)) = F2(x0) เรียกว่า iterat อันดับที่ 2 ของ F ตัวอย่าง กำหนดให้ F(x) = x2 + 1 จะได้ F2(x) = (x2 + 1)2 + 1 F3(x)= ((x2 + 1)2 + 1)2 + 1 ….
Orbit นิยาม กำหนดให้ x0 เป็นจำนวนจริง Orbit ของ x0 ภายใต้ F คือ ลำดับของจุด x0 , x1 , x2 , x3, … ,xn , … โดยที่ x1= F(x0) x2= F 2(x0) … xn = F n(x0) … และเรียกจุด x0 ว่า Seed of the Orbit
ตัวอย่าง กำหนดให้ F(x) = เมื่อเลือก x0 = 256 เป็นจุดเริ่มต้น จะได้ Orbit ของ x0 คือ x0 = 256 x1 = = 16 x2 = = 4 x3 = = 2 x4 = = 1.41 …..
FixedPoint ในกรณีที่ทำซ้ำไปเรื่อย ๆ ปรากฏว่าได้ค่าเท่าเดิมเราจะเรียกค่านั้นว่า Fixed Point กล่าวคือ ที่ F(x0) = x0 ซึ่งจะได้ว่า F2(x0) = F3(x0) = …. = Fn(x0) = x0
ตัวอย่าง กำหนดให้ F(x) = sin x เมื่อเริ่มต้นที่ x0 = 0 จะได้ F(x0) =F2(x0) = …. = Fn(x0) = sin 0 = 0 เพราะฉะนั้น 0 คือ fixedpoint ของ F(x) = sin x ฟังก์ชันหนึ่งอาจมี fixedpoint ได้หลายจุด ขึ้นอยู่กับการ เลือก x0 เช่น 0,1,-1 เป็น fixedpoint ของ F(x) = x3 และ 0,1 เป็น fixedpoint ของ F(x) = x2
จากการศึกษาพบว่าพฤติกรรมที่เป็นไปได้ของ Orbit ของ x0 คือ 1) Orbit จะลู่เข้าสู่ fixedpoint หรือ เป็นคาบ 2) Orbit จะลู่ออกสู่ อนันต์ (infinity) 3) Orbit อาจอยู่ในช่วงใดช่วงหนึ่ง หรืออาจกล่าวได้ว่า Orbit มีขอบเขต
ComplexDynamics • ในทำนองเดียวกันหากพิจารณาในฟังก์ชันจำนวน เชิงซ้อน Orbit ของ z0 คือ ลำดับ z0, F(z0), F 2( z0), …., Fn( z0),…. เมื่อ z0 คือ จำนวนเชิงซ้อน
Julia Set (Gaston Julia) เป็นการศึกษาถึงการส่งของ • ฟังก์ชันที่มีการทำซ้ำ ๆ (Iteration) บนระนาบเชิงซ้อน • ในเบื้องต้นเราพิจารณาฟังก์ชัน Quadratic โดยเขียนแทนด้วย • Qc(z) = z2 + c • เมื่อ z คือ จำนวนเชิงซ้อน • c คือ จำนวนเชิงซ้อนคงที่
ถ้าเขียน z ในรูป z = reiθ จะได้ Orbit ของ z0 ภายใต้ Q 0(z) = z2 คือ z0 = reiθ Q0(z0)= z1= r2 ei(2θ) Q02(z0)= z2= r4 ei(4θ) Q03(z0)= z3= r8 ei(8θ) …. Q0n(z0)= zn= ….
จาก r = |z| เมื่อ |z| > 1จะได้ว่า Q0n(z)→∞ เมื่อ n →∞ |z| <1 จะได้ว่า Q0n(z)→ 0เมื่อ n →∞ |z| = 1 จะได้ วงกลมรัศมี 1 หน่วย
นิยามOrbit ของ z ภายใต้ Q c(z) จะมีขอบเขต (bounded) ถ้ามี Kที่ทำให้ |Qcn(z)| < K ทุก n นิยามFilled Julia Set ของ Qc (z) คือ เซตของจุดซึ่ง Orbits มีขอบเขต แทนด้วย Kc และ Julia Set ของ Qc(z) คือ ขอบเขตของ Filled Julia Setแทนด้วย Jc
ในการจะหา Filled Julia Set ตามนิยามเราต้อง ตรวจสอบดูว่า Orbit ของ z ใดมีขอบเขตคือต้องตรวจสอบดูว่า |Qcn(z)|→∞ เมื่อ n →∞ ทฤษฎีบท ถ้า |z|≥|c| > 2 แล้ว | Qcn(z)|→∞ เมื่อ n →∞
พิสูจน์ โดยอสมการอิงสามเหลี่ยม |Qc (z)| ≥|z|2 - |c| ≥|z|2 - |z| (จาก |z|≥|c| ) = |z|(|z| - 1) จาก |z| > 2 จะมี λ > 0 ที่ซึ่ง |z| - 1 > 1 + λ ดังนั้น |Qc(z)| > (1 + λ)|z| |Qcn(z)| > (1 + λ)n|z| ดังนั้น Orbits ของ z ลู่ออกสู่อนันต์
การคำนวณ Filled Julia Set • แนวคิด เราจะอาศัยหลักการตามทฤษฎีข้างต้นคือจะแบ่งพื้นที่บนระนาบออกเป็นตารางจุดเล็ก ๆ แล้วตรวจดูว่าจุดในตารางนั้นมี Orbits ที่ลู่ออกสู่อนันต์หรือไม่ ถ้าไม่มีก็จะให้ตารางจุดนั้นเป็นสีดำ โดยการทำซ้ำ( Iteration) ตามที่กำหนด และภายใต้เงื่องไข |Qcn(z)| < 2 เพราะถ้าค่า |z|≥|c| > 2 แล้ว จะลู่ออกสู่อนันต์ตามทฤษฎี
โปรแกรมการคำนวณFilled Julia Set • โปรแกรมที่แสดงต่อไปนี้เขียนขึ้นโดยใช้ mathematica โดยเริ่มจากฟังก์ชันquadraticแล้วประยุกต์ไปเป็น ฟังก์ชัน sin z,cos z และ ฟังก์ชัน exponential
ฟังก์ชัน quadraticQc(z) = z2 + c Orbitcheckqu [z_,c_,iters_] :=(s=z; i=1; While [i≤iters&&Abs[s]<2,i++;s=s^2+c]; If [i==iters+1,{Re[z],Im[z]}#&/@{1,-1},{}]) FilledJuliaqu[c_,{meshx_,meshy_},{x0_,x1_}, {y0_,y1_}, iters_]:= Show[ Graphics[{PointSize[0.002], Map[Point, Flatten[Outer[orbitcheckqu[#1+I#2,N[c],iters]&, Range[x0,x1,(x1-x0)/meshx], Range[y0,y1,(y1-y0)/meshy]],2]]}], AspectRatio → Automatic ,PlotRange → All ]
C = - 0.12256117 + 0.74486177I FilledJuliaqu[c,{500,500},{-1.31,0.52},{0,1.11},30]
C = - 0.11 + 0.86I FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},30]
C = - 1.32 FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50]
C = - 0.5 + 0.57I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = - 0.360284 + 0.100376I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = - 0.32 + 0.043I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = - 0.390541 – 0.586788I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = - 0.3 + 0.4I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = - 0.75; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = - 0.75 + 0.1I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},30];
C = - 0.75 + 0.1I; FilledJuliaqu[c,{400,400},{-1.5,1.5},{-1.5,1.5},40];
C = - 0.7382 + 0.0827I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = - 0.75 + 0.1I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},90];
C = - 1; FilledJuliaqu[c,{500,500},{-.5,1.5},{1.5,1.5},30];
C = 0.27334 + 0.00742I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = - 0.2 + 0.75I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = - 0.1194 + 0.6289I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = 0.25 + 0.52I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
C = 0.377 – 0.248I; FilledJuliaqu[c,{500,500},{-1.5,1.5},{-1.5,1.5},50];
ฟังก์ชัน cos zFc(z) = (c) cos z Orbitcheckcos [z_,c_,iters_] :=(s=z; i=1; While [i≤iters&&Abs[s]<50,i++;s=c*cos[s]]; If [i==iters+1,{Re[z],Im[z]}#&/@{1,-1},{}]) FilledJuliacos[c_,{meshx_,meshy_},{x0_,x1_}, {y0_,y1_},iters_]:= Show[ Graphics[{PointSize[0.002], Map[Point, Flatten[Outer[orbitcheckqu[#1+I#2,N[c],iters]&, Range[x0,x1,(x1-x0)/meshx], Range[y0,y1,(y1-y0)/meshy]],2]]}], AspectRatio → Automatic,PlotRange → All ]
C = 2.96; FilledJuliacos[c,{1050,1050},{-3,3},{-3,3},60];
ฟังก์ชัน sin zFc(z) = (c) sin z Orbitchecksin [z_,c_,iters_] :=(s=z; i=1; While [i≤iters&&Abs[s]<50,i++;s=c*sin[s]]; If [i==iters+1,{Re[z],Im[z]}#&/@{1,-1},{}]) FilledJuliasin[c_,{meshx_,meshy_},{x0_,x1_}, {y0_,y1_},iters_]:= Show[ Graphics[{PointSize[0.002], Map[Point, Flatten[Outer[orbitcheckqu[#1+I#2,N[c],iters]&, Range[x0,x1,(x1-x0)/meshx], Range[y0,y1,(y1-y0)/meshy]],2]]}], AspectRatio → Automatic,PlotRange → All ]
C = 1 + 0.2I; FilledJuliasin[c,{600,600},{-1.5,1.5},{-1.5,1.5},50];
C = 1 + 0.1I; FilledJuliasin[c,{500,500},{-3,3},{-5,5},50];
C = 0.61 + 0.81I; FilledJuliasin[c,{400,400},{-3,3},{-3,3},30];
C = 0.61 + 0.81I; FilledJuliasin[c,{400,400},{-3,3},{-3,3},50];
C = 0.61 + 0.81I; FilledJuliasin[c,{400,400},{-3,3},{-3,3},100];