THÂN CHÀO QUÝ BẠN
Blogger nầy chỉ tồn trử kiến thức và kinh nghiệm về nghề “Materials Testing”, “Textile Screen Printing” và “Internet Programming” của một kỹ sư đã phục vụ tại :
* Trung Tâm Khảo sát Kỹ Thuật Quân Nhu /QLVNCH “ & “ Viện Quốc Gia Định Chuẩn/VNCH”
* Xí nghiệp “Hiệp Hưng / VN” ( sãn xuất giày vãi cao su )
"Bradbury Company Inc/USA"(Textile Screenprinting,Imprinted Sportswear Programs) & “Sundance Graphics Inc / USA” ( in bông vãi sợi ) từ năm 1965 để dành cho thế hệ trẻ muốn học nghề.
Vạn Vật Thái Bình (PEACE ON EARTH).

Friday, December 12, 2014

USING ONCHANGE AND SELECT ONCHANGE

 Xử dụng onchange và select onchange. 
onchange là event handler (The event handler is triggered when the 
specified event occurs ) và cũng là attribute có syntax như sau.
                            onchange=” script command “
Script command là javaScript code, javaScript function, javaScript statement, 
javaScript program dùng để call function hay parse value.
onchange được xử dụng cho input, select , textarea , iframe và div.
 
Thí dụ xử dụng onchange và select onchange.
1- Dùng onchange làm thay đổi những gì viết trong input. 
Thay đổi chữ viết trong box rồi click ở ngoài box .Window pop up sẽ
xuất hiện cho biết bạn đã viết chữ gì thay cho chữ Hello Friends.

<input type="text" value="Hello Friends"
onchange="alert(this.value)">
<hr>
<input type="text" id="txt" value="Hello Friends"
onchange=alert(document.getElementById('txt').value);>

2- Dùng onchange cho 2 commands cách biệt bằng dấu chấm phẩy.
      <input type="text" onChange = 
            alert( ' Cám ơn bạn muốn tham gia.' );
           confirm( 'Bạn có muốn tiếp tục mở xem không?' );"> 
3- Dùng onchange để parse một value. 
      <input type="text" onChange=" 
           if (parseInt(this.value) <= 10) {
          alert('Please enter a number greater than 10.');}">
4- Dùng onchange để call function .Thí dụ function nầy sẽ báo cho 
biết khi nào trong textarea có sự thay đổi.
    <html >
    <body>
    <script>
     function changeText(){
     alert("Đã có thay đổi trong textarea...");}
    </script>
    <textarea  rows="5" cols="50" onchange ='changeText()'></textarea>
    </body>
    </html>
5- Dùng select onchange cho droplist. Trong droplist có nhiều option values..Khi chọn xong value thì onchange mới vận hành để call function.
5-1-Thí dụ nầy function display() sẽ viết option value đã chọn vào trong 
div tag khi onchange vận hành.
  <html>
  <body>
  <script>
    function display() {
    document.getElementById("txt").innerHTML=document.getElementById("mySelect").value}
  </script>
     <select id="mySelect" onchange="display();">
   <option value=" ">select</option>
   <option  value="Bread">Bread</option>
   <option  value="Cafe">Cafe</option>
   <option  value="Green Tea">Green Tea</option></select>
   <div id="txt" style="width: 200px; height: 100px; 
   border: 1px solid red; text-align:left; padding:5px;font-family:arial;font-size:20px"></div>
   </body>
   </html>
 
5-2 – Dùng select onchange thay đổi background color
<html>
<body>
<script>
    function  change(a) {
        var col = a.options[a.selectedIndex].value;
        if (col) { document.bgColor = col; }
        alert("The background color changes to "+ col) } 
</script> 
<body>
<select id="color" onchange="change(this)">
    <option value=” " >select</option>
    <option value="cyan">Cyan</option>
    <option value="tan">Tan</option>
    <option value="purple">Purple</option></select>
</body></html> 
 
Chữ this đi với parameter a. Vì muốn display value nên nối kết value với selectedIndex.
Nếu chỉ muốn display số thứ tự 1, 2, 3 … thì viết.
var col = a.selectedIndex 
 
6- Dùng select onchange đơn độc không cần phải có javaScript function.
Áp dụng phương pháp nầy để thay đổi màu sắc , độ lớn, kiểu chữ viết của từng chữ một hay từng câu theo ý muốn mà không gây ảnh hưởng đến các chữ khác.
6-1-Thí dụ nầy giúp chúng ta biết cách thay đổi màu sắc của chữ.
   <html>
   <body>
   <select onchange=
   'document.execCommand("ForeColor",0,this.options[this.selectedIndex].text)'>
   <option style="color:black;"value="black">black</option>
   <option style="color:red;" value="red">red</option>
   <option style="color:blue;" value="blue">blue</option>
   <option style="color:green;" value="green">green</option></select>
   <div  contenteditable ="true" style="width:200px;height:100px;
   border:1px solid red;text-align:left;padding:5px;font-family:arial;
   font-size:20px"></div>
   </body>
   </html>

this.options : đưa tới các options trong select tag.
this.selectedIndex : đưa tới index của selected item.
Nếu chúng ta muốn chọn 1st item thì viết this.selectedIndex=0.
value : là value của option. Nếu áp dụng cho text thì thay chữ
value bằng chữ text
Khi dùng document.execCommand() thì trong div tag phải viết thêm
 contenteditable="true" mới ok.




6-2- Thi dụ nầy cho biết cách thay đổi các kiểu của từng chữ.
<html><body>
<select onchange=
'document.execCommand("FontName",0,this.options[this.selectedIndex].value)'
    <option value="">select</option>
    <option value="Arial">Arial</option>
    <option>Times</option>
    <option value="Courier">Courier</option>
    <option value="Comic Sans MS">Comic Sans MS</option></select>
<div contenteditable="true"  style="width:200px; height:100px;
border: 1px solid red; text-align:left;font-family:arial;padding:5px;
font-size:20px"></div>
</body></html>

6-3- Thí dụ nầy làm thay đổi màu của tất cả những gì viết trong textarea.
Không cần làm highlite.
<html><body>
<select onchange="editor.style.color= this.value;">
     <option style="color:black">black</option>
     <option style="color:blue">blue</option>
     <option style="color:red">red</option>
     <option style="color:green">green</option>
</select><br/>
<textarea id="editor" cols="20" rows="5"style="border-color:red;
font-family:arial;font-size:20px;text-align:left; padding:5px; margin-top:3px">
</textarea>
</body></html>

6- 4 - Thí dụ nầy làm thay đổi màu của tất cả những gì viết trong div tag.
 Không cần làm highlite nhưng phải viết contenteditable= “true” trong div tag
 mới OK.
<html><body>
<select onchange="editor.style.color= this.value;">
     <option style="color:black">black</option>
     <option style="color:blue">blue</option>
     <option style="color:red">red</option>
     <option style="color:green">green</option>
</select><br/>
<div id="editor" contentEditable="true" style="width:200px;height:100px;
border:solid 1px; font-family:times new roman; font-size:20px;text-align:left;
padding:5px; margin-top:3px">
</div>
</body></html>

6-5 -Thí dụ nầy cho biết cách chọn những trang html
Value là những trang mà chúng ta đã save với dạng html.
Những trang html nầy gồm có bài viết, hình vẽ cố định và hình vẽ di động
<form>
<select
Onchange="location=this.options[this.selectedIndex].value;">
  <option value="">select
  <option value="canvas.html">Hình vẽ
  <option value="dinhchuan.html">Nhân Viên Định chuẩn
  <option value="svg.html">Cá đang bơi lội
</select></form>
 
Xử dụng document.execCommand( )
·         Chỉ cho kết quả nếu viết ở ngoài div tag.
·         Nếu muốn viết trong div tag thì không có kết quả vì nó ăn cắp focus.Để tránh khuyết điểm nầy chúng ta phải viết thêm trong div tag như sau.
<div onmousedown="event.preventDefault();"
onclick="document.execCommand('italic',false,null);">Italic</div>
Thí dụ.
<html>
<body>
<button onclick="document.execCommand('italic',false,null);">Italic</button>
<div onmousedown="event.preventDefault();"
onclick="document.execCommand('italic',false,null);">Italic</div>
<div id="editor" contentEditable="true" style="width:200px; height:100px; 
border:solid 1px; font-family:times new roman; font-size:20px;text-align:left;padding:5px; 
overflow:auto; margin-top:3px"> Highlite chữ viết và click Italic
</div> 
</body>
</html>


Friday, December 5, 2014

DRAWING VECTOR IMAGES WITH SVG

VẼ HÌNH VECTOR IMAGES BẰNG SCALABLE VECTOR GRAPHICS- SVG

SVG giúp chúng ta vẽ vector images bằng cách dùng code tọa độ x và y chứa trong XML tag.
SVG xuất hịên vào năm 1999 do những công ty Adobe, Apple và IBM (a group of companies within the W3C) tìm ra và đã thành tiêu chuẩn quốc tế từ ngày 4-Sept-2001 với tên www.w3.org/2000/svg.

Thí dụ đây là một hình vẽ theo phương pháp svg.
Mở Notepad chép nguyên văn svg code nây.
Save với ký hiệu svg.html rồi mở xem bằng browser Chrome hoặc IE9 sẽ thấy một hình màu xanh có viền đỏ xuất hiện giống như bên cạnh.
Nếu mở xem bằng IE8 thì không thấy hình xuất hiện.




SVG có những ưu điểm như sau.
-          Hình vẽ nhẹ hơn hình bitmap,nghĩa là không chiếm chỗ rộng như hình bitmap hoặc hình GIF, PNG…
-          Hình vẽ, chúng ta có thể thu nhỏ lại hoặc làm lớn dễ dàng nhưng vẫn sắc sảo.Khi in ra hình có high resolution.
-          Hình vẽ tuy ở trạng thái bất động (static) nhưng có thể di động (animated,dynamic) dễ dàng nếu muốn mà không cần phải dùng JavaScript function.
-          Khi muốn vẽ hình chỉ cần có Notepad là làm được tất cả theo ý muốn.Tất cả computer đều có Notepad.
Cắt nghĩa chi tiết cách vẽ hình trên.

* Trước tiên cần phải có root declaration hay declaration statement chứa trong tag của svg và có thể viết rất gọn như sau vẫn có kết quả tốt.
            svg  xmlns="http://www.w3.org/2000/svg
* Trước khi muốn vẽ loại hình gì thì phải chọn element hay object thích ứng với loại hình đó. SVG có nhiều elements như path, rect, circle, ellipse, line, polyline, polygon, image
*  Với hướng dẫn nầy chúng ta chọn path  vì nó có đặc tính vẽ được nhiều hình phức tạp kết hợp bởi đường cong và đường thẳng.Còn các elements khác thì chỉ vẽ được một kiểu hình mà thôi.Xử dụng path hơi khó gọi là “ hardest element to master ” để vẽ những hình có các đường cong .
*  Sau khi chọn path thì viết chử = “…..”.Chữ d có nghĩa là bắt đầu vẽ hình bằng cách chọn tọa độ x , y.
SVG dùng parser làm ngòi bút ( pen) chứ không phải ngòi bút của tay chúng ta.
Khi chọn command thì parser sẽ làm theo command đó.
Commands gồm có những chữ sau đây viết hoa hoặc viết thường
M , L , H , V , S , C , Q , T , A , Z .Viết hoa khi chúng ta muốn ngoì bút ở position absolute còn viết thường thì chỉ cần ngòi bút ở position relative.

M nghĩa là ngòi bút phải moveto bắt đầu từ tọa độ (x=200 , y=150 ) và dừng lại ở tọa độ ( x=200, y=150).Nếu muốn cho ngòi bút vẽ thêm thì tiếp tục viết thêm tọa độ.
nghĩa là closepath ,dừng lại.Chúng ta có thể viết thêm chữ nầy vào tọa độ cuối cùng  tức là nơi chúng ta muốn dừng lại.
                     d="M 200 150,54 180,60 100,200 150 Z ”
Khởi hành từ tọa độ (200,150) ,đi xuống tới tọa độ (54,180),đi lên tới tọa độ ( 60,100), trở về điểm khởi hành có tọa độ (200,150) .
* stroke ở đây nghĩa là đường vẽ của ngòi bút mà chúng ta vẽ (a movement by the pen).Đường vẽ nầy cần tô màu hay không và có bề rộng bao nhiêu tùy chúng ta muốn.
fill .Khi vẽ xong nếu muốn tô màu xanh thì viết fill=”blue”.Nếu không muốn tô màu thì viết fill=”none”.Nếu viết fill = “ …” hoặc hoặc không viết chữ fill thì default tô màu đen thui.

                                            ---------------------------------------------------------------
Cách vẽ đường thẳng và đường cong (curve)
Áp dụng hướng dẫn cách vẽ ở phần trên,chúng ta chỉ cần bỏ bớt tọa độ hoặc giử nguyên những tọa đô đó rôi viết thêm ký hiệu của command thì những đường thẳng hay đường cong sẽ xuất hiện tuỳ theo command đã chọn.
       Muốn vẽ đường thẳng thì chỉ cần xác định 2 toạ độ như sau.
                        d="M 200 150,54 180Z ”
              Muốn vẽ đường cong thì viết thêm chữ trước tọa độ mà đường cong sẽ bị bẻ cong.
                        d="M 200 150,C 54 180,60 100,200 150 Z ”. Chữ C nghĩa là Curve .
Nghĩa là chỉ cần thêm chữ C vao trước tọa độ thì hình tam giác phía trên biến ra hình dưới đây.
Đường cong từ tọa độ ( 54,180) lao tới tọa độ ( 60,100) rồi quay trở về toạ độ mà ngòi bút khởi hành ( 200,150)


Tóm lại từ một hình tam giác vẽ theo svg,chúng ta có thể chuyển đổi thành một hình phức tạp bằng cách tự mình suy nghĩ chọn tọa độ x,y  và dùng các ký hiệu commands thì parser sẽ theo command vẽ cho chúng ta.
Chuyển đổi hình trên thành con cá di động bằng cách thay đổi commands và viết như sau.
----------------------------------

Cách vẽ đường cong “ Quadratic  Bézier  Curve”
Command của đường cong nầy là chữ Q.
Đường cong cần phải có :
  • Tọa độ x,y của hai điểm tựa goị là điểm khởi hành (start point) và điểm dừng lại (final point) .
  • Phải có thêm tối thiểu một toạ độ x,y của một điểm nữa goị là control point.


Thực tập vẽ con cá màu xanh.
How to draw a green fish by using svg ?

* Trước tiên vẽ thân của con cá bằng cách viết tọa độ như sau.
         path d="M 200 160,C 250 200,350 120,200 160,
         Tọa độ chỗ đuôi gắn vào thân con cá là ( 200,160 )
       * Tiế́p theo viết tọa độ của 2 đường thẳng nối vào phần cuối của thân con cá.
                        L 200 160,180 170,
                        L 200 160,175 150,
 * Tiếp theo viết tọa độ của đường cong nối 2 đầu cuối cùng của 2 đường thẳng vừa vẽ.
                        C 175 150,185 160,180 170 Z"
 * Tiếp theo nữa viết tọa độ vòng tròn tượng trưng cho con mắt của cá như sau.
                         circle cx="260" cy="155" r="3" stroke="black" fill="blue"
* Cuối cùng góp hết những gì vừa vẽ xong vào chung một bảng như dưới đây thì sẽ thấy một con cá màu xanh viền đỏ xuất hiện khi mở Browser Chrome.


                                                     
Chúng ta sẽ dùng con cá nầy để học những bài kế tiếp về animation by SMIL. Nhớ  phải dùng Browser Chrome thì mới thấy con cá xuất hiện.
Những hình vẽ svg có thể ví như chiếc xe hơi cần phải có tài xế thì mới di động được.Tài xế chính là JavaScript và SMIL.
Chúng ta đã có những bài học về JavaScript đăng trong Blogger nầy rồi.Nhưng JavaScript hơi phức tạp phải mất nhiều thời gian học và thực tập mới xử dụng dễ dàng.
Còn SMIL(Synchronized Multimedia Integration Language ) thì rất đơn giản và rất hửu hiệu khi  làm chuyển động nhưñg hình svg .

Friday, November 21, 2014

CREATING A STAR ORBITING ALONG AN ELLIPSE

<body><center>
     <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
     <g><rect fill="black" height="180" width="300" x="150" y="170">  
     <ellipse cx="300" cy="260" rx="20" ry="10" stroke-width="5'
      fill="black" stroke="red" transform="rotate(-2)">
     </ellipse>
     </rect></g>

     <g><path d="M 400,250
         a 100,50 350  1,0 0,0.00099 " fill="none" id="ellipse" stroke="white">
     </path></g>

     <g><circle cx="6" cy="3" fill="red" r="6">
     <animateMotion begin="BG.click" dur="10" end="ST.click"     repeatCount="indefinite">
      <mpath xlink:href="#ellipse"/>
      </animateMotion>
     </circle></g>

     <g id="BG">
     <text fill="blue" font-family="arial" font-size="15" x="10"   y="50">START</text></g>
     <g id="ST">
     <text fill="red" font-family="arial" font-size="15" x="80" y="50">STOP</text></g>
     </svg></center>
    
<center>
<span style="color: purple; font-size: 25;">Chú ý theo định luật Kepler và Newton,

ngôi sao nào quay một mình trên quỷ đạo hình vòng tròn thì có thể nó đang quay quanh một black hole</span></center></body>

Saturday, November 15, 2014

DRAWING AN ELLIPSE PATH FOR A STAR ANIMATION

VẼ QUỶ ĐẠO ELLIPSE  PATH VÀ LÀM NGÔI SAO CHUYỂN ĐỘNG TRÊN ĐÓ.
Thực tập.

Chép nguyên văn bảng code trên vào Notepad rồi xử dụng browser Google Chrome sẽ thấy xuất hiện một hình ellipse không khép kín như thế nầy.

Đây là hình ellipse có trục lớn rx=100, trục nhỏ ry=50,góc quay 
zero độ.Chọn số 1 cho large-arc-flag.Chọn số 0 cho sweep-flag.
Chọn tọa đô(0,5)cho End point đối với Start point.


 Chúng ta sẽ tìm hiểu :
    - Những con số trên tô màu khác nhau .
    - Cách làm cho hình ellipse khép kín.
    - Cách làm cho ellipse quay theo góc độ như ý muốn.
    - Cuối cùng chúng ta tìm hiểu cách làm một hành tinh chuyển động trên quỷ đạo ellipse đã vẽ.

Những con số trên tô màu khác nhau.
Muốn vẽ ellipse theo phương pháp SVG cần phải dùng 9 thông số ( parameters ) xếp theo thứ tự từ trái sang phải.

x,y, rx,ry, góc muốn quay của trục, large-arc-flag, sweep-flag, x và y của điểm chấm dứt.

* x,y là toạ độ của điểm ngòi bút bắt đầu vẽ (Start point) phải có chữ M hay m đứng trước.M nghĩa là MoveTo
* rx ,ry là trục lớn và trục nhỏ của ellipse.Có chữ A hay a đứng trước.A nghĩa là Arc.
* góc muốn quay của trục.Gọi là x-axis rotation tính bằng độ degrees.Hình vẽ trên chọn góc quay 0 độ.
Khi chúng ta thay đổi góc quay thì 2 điểm Start point và End point vẫn đứng yên với tọa độ đã có trừ trường hợp chúng ta làm Transform = “translate(x,y)”
* large-arc-flag là tên dùng để diễn tả hình vẽ lớn hơn hay nhỏ hơn 180 độ.Chọn con số 1 nếu hình vẽ lớn hơn 180 độ và chọn con số 0 cho hình nhỏ hơn 180 độ.
* sweep-flag là tên dùng để diễn tả khi bắt đầu vẽ đi theo chiều kim đồng hồ gọi là dương hay theo chiều ngược kim đồng hồ gọi là âm. Chọn con số 0 nếu theo chiều âm. Chọn con số 1 nếu theo chiều dương.
* tọa độ x,y của điểm chấm dứt (end point).Tọa độ nầy tính theo trục qua tâm toạ độ x,y của điểm khởi hành (Start point) cho nên khi tọa độ nầy rất ít thì 2 điểm Start point và End point gần nhau như hình vẽ trên.
Muốn 2 điểm Start point và End point coi như gặp nhau thì viết 0, 0.00099 thay vì 0, 5 như đã chọn


Góc muốn quay của trục ellipse path đối với trục x.
Để có thể khảo sát dể dàng góc quay của trục ellipse path đối với trục x, chúng ta vẽ thêm vào ellipse path 2 đường thẳng góc có tâm là Start point như bảng code sau đây.
Thay đổi góc quay chúng ta có những hình nầy và thấy rõ Start point và End point đứng yên tại chỗ.
Muốn Start point và End point dính vào nhau nghĩa là ellipse path khép kín ,chúng ta viết  0, 0.00099 thay cho 0, 25



Chúng ta thực tập vẽ một ngôi sao di chuyển chung quanh một black hole (Xem hình vẽ) bằng cách xử dung phương pháp SVG và SMIL.
Vì nền trời là màu đen nên phải vẽ trước.Những gì có màu lợt hơn màu đen thì vẽ sau để tránh màu đen che phủ.
Quan sát hình vẽ nầy, chúng ta phải vẽ theo thứ tự như sau.
-Vẽ nền trời màu đen.
-Vẽ black hole hình ellipse.Chung quanh black hole cò một vòng màu đỏ tượng trưng cho X-rays emitted.
-Vẽ quỷ đạo ellipse path.
-Vẽ ngôi sao hình tròn tô màu đỏ và viết code để ngôi sao chạy trên quỷ đạo ellipse.


Đây là bảng code của hình vẽ trên. Chúng ta chọn góc quay của ellipse path 350 degrees. Góc quay của black hole -3 degrees.


Muốn biết hình chuyển động như thế nào thì mở xem đề tài kế tiếp :

Using SVG-SMIL to make a star orbiting a black hole