<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/nina_a/">
    <title>メモ帳ブログ @ wiki</title>
    <link>http://w.atwiki.jp/nina_a/</link>
    <atom:link href="https://w.atwiki.jp/nina_a/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>メモ帳ブログ @ wiki</description>

    <dc:language>ja</dc:language>
    <dc:date>2024-01-06T12:19:46+09:00</dc:date>
    <utime>1704511186</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/63.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/68.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/67.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/66.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/65.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/64.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/34.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/57.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/nina_a/pages/1.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/63.html">
    <title>コメント/WPF/装飾レイヤー</title>
    <link>https://w.atwiki.jp/nina_a/pages/63.html</link>
    <description>
      -aasasaw - aa 2011-07-13 13:16:41  
-ああ - あああ 2012-03-27 16:33:39  
-あああ - あああ 2012-03-27 16:33:58  
-aaa - aaa 2012-03-29 18:19:11  
-aaaaaaaaaaaaaaaaaa - aaaaaaaaaaaaaaa 2013-05-24 16:42:23  
-ｐ - ｐ 2014-06-12 13:30:36  
-r - r 2014-09-12 15:05:14  
-あｄふぁ - あああ 2014-09-24 14:54:01  
-てて - ててて (2024-01-06 12:19:46)     </description>
    <dc:date>2024-01-06T12:19:46+09:00</dc:date>
    <utime>1704511186</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/68.html">
    <title>コメント/WPF/ゴースト付きのドラッグ・アンド・ドロップ</title>
    <link>https://w.atwiki.jp/nina_a/pages/68.html</link>
    <description>
      -古い記事にコメントスミマセン。Formの外にはゴーストは表示出来ないでしょうか - てんてん 2017-07-31 21:35:43      </description>
    <dc:date>2017-07-31T21:35:43+09:00</dc:date>
    <utime>1501504543</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/67.html">
    <title>comment</title>
    <link>https://w.atwiki.jp/nina_a/pages/67.html</link>
    <description>
      - ラグランジュの未定乗数法の解説、とってもわかりやすかったです。 &amp;br()KKT条件がなぜそうなるかについてもわかりやすかった。 &amp;br()絵的に理解できました。 &amp;br()ありがとう。  &amp;br() --  (たく)  &amp;size(80%){2013-07-16 23:46:08}     </description>
    <dc:date>2013-07-16T23:46:08+09:00</dc:date>
    <utime>1373985968</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/66.html">
    <title>WPF/Canvasによるドラッグ・アンド・ドロップ</title>
    <link>https://w.atwiki.jp/nina_a/pages/66.html</link>
    <description>
      *Canvasを使ったドラッグ・アンド・ドロップ（D&amp;D）
#right(){&amp;link_edit(text=このページを編集)}

**概要
Canvasを使ってドラッグ操作，およびドロップ操作を実現する．サンプルとしてItemsControlのアイテムをドラッグで削除するプログラムを作成する．

情報元
Charles Petzold：[[The Ins and Outs of ItemsControl&gt;&gt;http://msdn.microsoft.com/en-us/magazine/ff714594.aspx]]，MSDN Magazine

**ItemsControl

#region(GhostAlignment.cs)
GhostAlignment.cs
#codehighlight(C#){{
public enum GhostAlignment
{
    BottomCenter,
    BottomLeft,
    BottomRight, 
    MiddleCenter,
    MiddleLeft, 
    MiddleRight,
    TopCenter,
    TopLeft,
    TopRight
} }}
#endregion

----

#center(){カテゴリ：[[WPF&gt;&gt;Category:WPF]]}

#pcomment()

&amp;br()&amp;br()&amp;br()&amp;br()&amp;br()    </description>
    <dc:date>2012-03-29T00:23:24+09:00</dc:date>
    <utime>1332948204</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/65.html">
    <title>[Java] 変換</title>
    <link>https://w.atwiki.jp/nina_a/pages/65.html</link>
    <description>
      *変換
#right(){&amp;link_edit(text=このページを編集)}

**文字列&lt;--&gt;各種オブジェクトの変換

***バイト列

****バイト列 -&gt; 文字列
#codehighlight(Java){{
byte[] str_bytes = new byte[]{0x41, 0x42, 0x43}; // ABC
String str = new String(str_bytes); }}
符号化方法を指定する場合
#codehighlight(Java){{
byte[] str_bytes = new byte[]{0x41, 0x42, 0x43}; // ABC
String str = new String(str_bytes, &quot;UTF-8&quot;); }}

****文字列 -&gt; バイト列
#codehighlight(Java){{
String str = &quot;ABC&quot;;
byte[] str_bytes = str.getBytes();}}
符号化方法を指定する場合
#codehighlight(Java){{
String str = &quot;ABC&quot;;
byte[] str_bytes = str.getBytes(&quot;UTF-8&quot;);}}

****バイト列 -&gt; 16進数表現文字列
#codehighlight(Java){{
public String bytes2hexString(byte[] array)
{
    if(array == null)
        throw new IllegalArgumentException(new NullPointerException());

    char[] c=new char[array.length*2];

    int tmp;

    for(int y=0, x=-1; y &lt; array.length; ++y)
    {
        tmp = (array[y]&gt;&gt;4) &amp; 0x0F;	
        c[++x]=(char)(tmp&gt;9 ? tmp+&#039;A&#039;-10 : tmp+&#039;0&#039;);	
        tmp = array[y] &amp; 0x0F;	
        c[++x]=(char)(tmp&gt;9 ? tmp+&#039;A&#039;-10 : tmp+&#039;0&#039;);
    }

    return new String(c);
} }}

****16進数表現文字列 -&gt; バイト列
#codehighlight(Java){{
public byte[] hexString2bytes(String hex)
{
    if(hex == null)
        throw new IllegalArgumentException(new NullPointerException());

    if(hex.startsWith(&quot;0x&quot;))
        hex = hex.substring(2);

    if(hex.length()%2 != 0)
        hex = &quot;0&quot; + hex;

    hex = hex.toUpperCase();

    byte[] b = new byte[hex.length()/2];
    char[] c = hex.toCharArray();

    for(int x=0, y=-1; x &lt; b.length; ++x)
    {
        b[x] =  (byte)(
                    ((c[++y] &gt; &#039;9&#039; ? c[y] - &#039;A&#039; + 10 : c[y]-&#039;0&#039;) &lt;&lt; 4)
                    + (c[++y] &gt; &#039;9&#039; ? c[y] - &#039;A&#039; + 10 : c[y]-&#039;0&#039;)
                );
    }

    return b;
} }}

----

#comment()

----

&amp;tags()

&amp;br()&amp;br()&amp;br()&amp;br()&amp;br()    </description>
    <dc:date>2011-12-06T13:40:08+09:00</dc:date>
    <utime>1323146408</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/nina_a/pages/2.html</link>
    <description>
      ***プロフィール
ＨＮ：んあ
性別：男
趣味：麻雀、漫画、ラノベ
メアド：nna17th.gmail@com（.と@を入れ替える）
Twitter:&amp;html(&lt;a href=&quot;http://www.twitter.com/nna17th&quot;&gt;nna17th &lt;img src=&quot;http://twitter-badges.s3.amazonaws.com/t_mini-b.png&quot; alt=&quot;nna17thをフォローしましょう&quot;/&gt;&lt;/a&gt;)

　中部地方の大学の大学院・情報系に在籍中。
　分かりにくい部分や間違いがあった場合は[[トップページ]]のコメント，メール，twitterでお願いします。

***カテゴリ
-&amp;link(C/C++){http://www27.atwiki.jp/nina_a/pages/14.html}
-&amp;link(OpenCV){http://www27.atwiki.jp/nina_a/pages/38.html}
-&amp;link(OpenGL){http://www27.atwiki.jp/nina_a/pages/28.html}
-&amp;link(TeX){http://www27.atwiki.jp/nina_a/pages/15.html}
-&amp;link(UNIX){http://www27.atwiki.jp/nina_a/pages/18.html}
-&amp;link(WPF){http://www27.atwiki.jp/nina_a/pages/58.html}
-&amp;link(MISC){http://www27.atwiki.jp/nina_a/pages/30.html}
-&amp;link_tag()

// 
// [[ &gt;&gt; ]] 方式でリンクを張ると各カテゴリページに載ってしまうため，&amp;linkで張る
//

***リンク
-&amp;link(C/C++ リファレンス){http://www.cppll.jp/cppreference/}
-&amp;link(Spaghetti Source){http://www.prefield.com/}
-&amp;link(C++マニアック){http://homepage2.nifty.com/well/}
-&amp;link(OpenGL){http://www.opengl.org/}
-&amp;link(GLUTによる「手抜き」OpenGL入門){http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html}
-&amp;link(OpenGL de プログラミング){http://wiki.livedoor.jp/mikk_ni3_92/}
-&amp;link(GLUI Reference){http://ktm11.eng.shizuoka.ac.jp/glui/glui.html}
-&amp;link(opencv.jp){http://opencv.jp/}
-&amp;link(@wiki){http://atwiki.jp}

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります
//**更新履歴
//#recent(20)

&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2011-11-15T15:08:15+09:00</dc:date>
    <utime>1321337295</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/64.html">
    <title>[XML] XMLスキーマ</title>
    <link>https://w.atwiki.jp/nina_a/pages/64.html</link>
    <description>
      *XMLスキーマ
#right(){&amp;link_edit(text=このページを編集)}

#contents(fromhere=true)

#divclass(info){{
このページはある程度XMLを知っている人や、XMLスキーマを何となく知っている人でないと分からないと思います。}}
//
//
//
//
//
**XMLスキーマとは
XMLスキーマはXMLの要素の名前やその出現位置や回数などを定義する文書です。XMLスキーマの基本形は以下のようになっています。以下は文字列をコンテンツとして持つdefinitionという要素を定義するXMLスキーマです。
#region(XMLスキーマの雛形)
#codehighlight(XML){{
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;xsd:schema xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;
            xmlns:n=&quot;http://xml.nna.com&quot;
            targetNamespace=&quot;http://xml.nna.com&quot;&gt;
    &lt;!-- 定義ここから --&gt;
    &lt;xsd:element name=&quot;definition&quot; type=&quot;xsd:string&quot; /&gt;
    &lt;!-- 定義ここまで --&gt;
&lt;/xsd:schema&gt;
}}
#endregion
//
//
//
//
//
**要素を定義する
XMLの要素を定義するにはelementを使用します。
#codehighlight(XML){{
&lt;xsd:element name=&quot;要素名&quot; type=&quot;型名&quot; /&gt;}}
型は既存の物ではなくその場で作成してもかまいません。このelement内で型を定義した場合，型の名前を省略することができて、この型のことを匿名型といいます。
#codehighlight(XML){{
&lt;xsd:element name=&quot;要素名&quot;&gt;
    &lt;!-- ここに型の定義を書く --&gt;
&lt;/xsd:element&gt;}}
要素を別の場所で定義しておいてそれを参照することが出来ます。
#codehighlight(XML){{
&lt;xsd:element ref=&quot;参照する要素名&quot; /&gt;

&lt;xsd:element name=&quot;要素名&quot;&gt;
    &lt;!-- ここに型の定義を書く --&gt;
&lt;/xsd:element&gt;}}
//
//
//
//
//
**型を定義する
XMLの型には単純型と複合型の2種類があります。単純型は属性も子要素も持つことが出来ず，あるのはコンテント（内容）のみです。属性や子要素を持つ場合は複合型を利用します。
||CENTER:単純型|CENTER:複合型|
|TOP:CENTER:例|TOP:&lt;date&gt;&amp;nbsp(br,4)2011/10/28&amp;br()&lt;/date&gt;|&lt;date type=&quot;solar&quot;&gt;&amp;nbsp(br,4)&lt;year&gt;&amp;nbsp(br,8)2011&amp;nbsp(br,4)&lt;/year&gt;&amp;br()&lt;/date&gt;|
|CENTER:属性の有無|CENTER:無|CENTER:有|
|CENTER:子要素の有無|CENTER:無|CENTER:有|
単純型の定義にはsimpleType、複合型の定義にはcomplexType要素を使用します。

***単純型
組み込みの単純型の一覧は[[google 検索&gt;http://www.google.co.jp/search?q=XML%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E+%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF+%E4%B8%80%E8%A6%A7]]からどうぞ。単純型を作る方法は、(1)既存の単純型に制限を加えて作成、(2)いくつかの単純型からどれか1つを選択する単純型、(3)既存の単純型の複数形の3つがあります。
#image(createSimpleType.png,width=575,height=176,title=新しい単純型の作成)

****既存型の制限
既存の単純型に制限を加えるにはrestrictionを使用する。
#codehighlight(XML){{
&lt;xsd:simpleType name=&quot;型名&quot;&gt;
    &lt;xsd:restriction baseType=&quot;元にする型名&quot;&gt;
        &lt;!-- 制限をここに記述する --&gt;
    &lt;/xsd:restriction&gt;
&lt;/xsd:simpleType&gt;}}

*****数値の制限
元にする単純型が数値の場合，最大値や最小値，桁数などを制限できます。
|CENTER:スキーマ|CENTER:制限|
|&lt;xsd:minInclusive value=&quot;x&quot; /&gt;|値はx以上である|
|&lt;xsd:maxInclusive value=&quot;x&quot; /&gt;|値はx以下である|
|&lt;xsd:minExclusive value=&quot;x&quot; /&gt;|値はxより大きい|
|&lt;xsd:maxExclusive value=&quot;x&quot; /&gt;|値はxより小さい|
|&lt;xsd:totalDigits value=&quot;x&quot; /&gt;|値の整数部はx桁以下である|
|&lt;xsd:fractionDigits value=&quot;x&quot; /&gt;|値の少数部はx桁以下である|

#region(open,最小値が0，最大値が9の整数値を定義するスキーマ)
#codehighlight(XML){{
&lt;!-- 最小値が0，最大値が9の整数値を定義 --&gt;
&lt;xsd:simpleType name=&quot;型名&quot;&gt;
    &lt;xsd:restriction baseType=&quot;xsd:int&quot;&gt; &lt;!-- intは組み込みの整数型 --&gt;
        &lt;xsd:minInclusive value=&quot;0&quot; /&gt;
        &lt;xsd:maxExclusive value=&quot;10&quot; /&gt;
    &lt;/xsd:restriction&gt;
&lt;/xsd:simpleType&gt;}}
#endregion

*****文字の制限
元にする単純型が文字列の場合、文字数の制限や、特定の文字列のみに制限したり、さらには正規表現による柔軟な制限も可能です。
|CENTER:スキーマ|CENTER:制限|
|&lt;xsd:length  value=&quot;x&quot; /&gt;|文字列の長さはxである|
|&lt;xsd:minLength value=&quot;x&quot; /&gt;|文字列の長さはx以上でである|
|&lt;xsd:maxLength value=&quot;x&quot; /&gt;|文字列の長さはx以下である|
|&lt;xsd:enumeration value=&quot;x&quot; /&gt;|文字列はxという値を取り得る|
|&lt;xsd:pattern value=&quot;x&quot; /&gt;|文字列は正規表現xと一致する|

#region(open,2文字以上3文字以下の文字列を定義するスキーマ)
#codehighlight(XML){{
&lt;!-- 2文字以上3文字以下の文字列を定義 --&gt;
&lt;xsd:simpleType name=&quot;型名&quot;&gt;
    &lt;xsd:restriction baseType=&quot;xsd:string&quot;&gt; &lt;!-- stringは組み込みの文字列型 --&gt;
        &lt;xsd:minLength value=&quot;2&quot; /&gt;
        &lt;xsd:maxLength value=&quot;3&quot; /&gt;
    &lt;/xsd:restriction&gt;
&lt;/xsd:simpleType&gt;}}
#endregion

#region(open,特定の文字列のみ受け入れる文字列を定義するスキーマ)
#codehighlight(XML){{
&lt;!-- 春、夏、秋、冬のみを受け入れる文字列を定義 --&gt;
&lt;xsd:simpleType name=&quot;型名&quot;&gt;
    &lt;xsd:restriction baseType=&quot;xsd:string&quot;&gt; &lt;!-- stringは組み込みの文字列型 --&gt;
        &lt;xsd:enumeration value=&quot;春&quot; /&gt;
        &lt;xsd:enumeration value=&quot;夏&quot; /&gt;
        &lt;xsd:enumeration value=&quot;秋&quot; /&gt;
        &lt;xsd:enumeration value=&quot;冬&quot; /&gt;
    &lt;/xsd:restriction&gt;
&lt;/xsd:simpleType&gt;}}
#endregion

#region(open,郵便番号のみ受け入れる文字列を定義するスキーマ)
#codehighlight(XML){{
&lt;!-- 郵便番号のみを受け入れる文字列を定義 --&gt;
&lt;xsd:simpleType name=&quot;型名&quot;&gt;
    &lt;xsd:restriction baseType=&quot;xsd:string&quot;&gt; &lt;!-- stringは組み込みの文字列型 --&gt;
        &lt;xsd:pattern value=&quot;\d{3}-\d{4}&quot; /&gt; &lt;!-- \d{3}-\d{4}は「数字3桁-数字4桁」を意味する正規表現 --&gt;
    &lt;/xsd:restriction&gt;
&lt;/xsd:simpleType&gt;}}
#endregion

****型の選択
いくつかの単純型のうち、どれか1つを選択する場合にはunionを利用します。以下は正整数か負正数のどちらかをとる単純型を定義しています。
#codehighlight(XML){{
&lt;xsd:simpleType name=&quot;型名&quot;&gt;
    &lt;xsd:union memberTypes=&quot;xsd:positiveInteger xsd:negativeInteger&quot; /&gt;
    &lt;!-- 半角スペースで区切って記述する --&gt;
&lt;/xsd:simpleType&gt;}}

****型のリスト
既存の単純型の複数形を作成するにはlistを利用します。以下は複数個の整数をとる単純型を定義しています。
#codehighlight(XML){{
&lt;xsd:simpleType name=&quot;型名&quot;&gt;
    &lt;xsd:list itemType=&quot;xsd:int&quot; /&gt;
&lt;/xsd:simpleType&gt;}}
なお、(1)の方法によりリストの長さを制限することが可能です。
|CENTER:スキーマ|CENTER:制限|
|&lt;xsd:length  value=&quot;x&quot; /&gt;|リストの長さはxである|
|&lt;xsd:minLength value=&quot;x&quot; /&gt;|リストの長さはx以上でである|
|&lt;xsd:maxLength value=&quot;x&quot; /&gt;|リストの長さはx以下である|

***複合型の定義
複合型の場合はsimpleTypeの代わりにcomplexTypeを使用して定義します。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;型名&quot;&gt;
    &lt;!-- ここに属性や子要素の定義を書く --&gt;
&lt;/xsd:complexType&gt;}}
複合型はコンテンツとして単純型を持つか、複合型を持つかの2通りに分けられます。
#codehighlight(XML){{
&lt;!-- 単純型をコンテンツに持つ複合型 --&gt;
&lt;text lang=&quot;jp&quot;&gt;日本語のテキスト&lt;/text&gt;
&lt;!-- 複合型をコンテンツに持つ複合型 --&gt;
&lt;text&gt;
    &lt;lang code=&quot;jp&quot;&gt;日本語のテキスト&lt;/lang&gt;
&lt;/text&gt;}}

****単純型を持つ複合型
単純型をコンテンツに持つ複合型を定義するにはsimpleContentを使用します。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;型名&quot;&gt;
    &lt;xsd:simpleContent&gt;
        &lt;xsd:extension base=&quot;元にする単純型名&quot;&gt;
            &lt;!-- ここに属性を書く --&gt;
        &lt;/xsd:extension&gt;
    &lt;/xsd:simpleContent&gt;
&lt;/xsd:complexType&gt;}}
また、元にする型に制限を加えることも出来ます。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;型名&quot;&gt;
    &lt;xsd:simpleContent&gt;
        &lt;xsd:restriction base=&quot;元にする単純型名&quot;&gt;
            &lt;!-- ここに制限を書く --&gt;
            &lt;!-- ここに属性を書く --&gt;
        &lt;/xsd:extension&gt;
    &lt;/xsd:simpleContent&gt;
&lt;/xsd:complexType&gt;}}

****複合型を持つ複合型
複合型をコンテンツに持つ複合型を定義するにはcomplexContentを使用します。基本は単純型と同じです。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;型名&quot;&gt;
    &lt;xsd:complexContent&gt;
        &lt;xsd:extension base=&quot;元にする複合型名&quot;&gt;
            &lt;!-- ここに属性を書く --&gt;
        &lt;/xsd:extension&gt;
    &lt;/xsd:simpleContent&gt;
&lt;/xsd:complexType&gt;}}
また、元にする複合型に制限を加えることも出来ます。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;型名&quot;&gt;
    &lt;xsd:complexContent&gt;
        &lt;xsd:restriction base=&quot;元にする複合型名&quot;&gt;
            &lt;!-- ここに制限を書く --&gt;
            &lt;!-- ここに属性を書く --&gt;
        &lt;/xsd:restriction&gt;
    &lt;/xsd:complexContent&gt;
&lt;/xsd:complexType&gt;}}
例えば、aという名前の要素を子要素に持つ型xは以下のように定義します。anyTypeという何でもありの型に「aという要素が登場する」という制限を加えて実現します。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;x&quot;&gt;
    &lt;xsd:complexContent&gt;
        &lt;xsd:restriction base=&quot;xsd:anyType&quot;&gt;
            &lt;xsd:sequence&gt;
                &lt;xsd:element name=&quot;a&quot; /&gt;
            &lt;/xsd:sequence&gt;
        &lt;/xsd:restriction&gt;
    &lt;/xsd:complexContent&gt;
&lt;/xsd:complexType&gt;}}

*****子要素の制限
子要素の制限は「何が」，「どの順で」，「何回」でてくるかを制限できます。
-要素指定　「何が」を制限するにはelement要素を指定します。
-順序指定　「どの順で」を制限するにはsequence, choice, all要素のいずれかを利用します．
-回数指定　「何回」を制限するにはminOccurs属性（最小出現回数）とmaxOccurs属性（最大出現回数）を使用します。いずれもデフォルトは1です。何回出現しても良い場合はmaxOccursにunboundedを指定します。

|順序定義|説明|
|sequence|順序指定。記述された通りの順序で要素が登場する。|
|choice|順序不問。記述された要素のいずれかが登場する。|
|all|順序不問。記述された要素が全てが1回登場するか、全て1回も登場しないかのどちらか。|

出現回数の定義は順序定義によって微妙に異なります。sequenceは要素が順序通りに出現しきったら1回ですが、choiceは要素が出現したら1回になります。以下のスキーマを例に見ます。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;x&quot;&gt;
    &lt;xsd:complexContent&gt;
        &lt;xsd:restriction base=&quot;xsd:anyType&quot;&gt;
            &lt;xsd:sequence maxOccurs=&quot;2&quot;&gt;
                &lt;xsd:element name=&quot;a&quot; type=&quot;aの型&quot; /&gt;
                &lt;xsd:element name=&quot;b&quot; type=&quot;bの型&quot; /&gt;
            &lt;/xsd:sequence&gt;
        &lt;/xsd:restriction&gt;
    &lt;/xsd:complexContent&gt;
&lt;/xsd:complexType&gt;

&lt;xsd:complexType name=&quot;y&quot;&gt;
    &lt;xsd:complexContent&gt;
        &lt;xsd:restriction base=&quot;xsd:anyType&quot;&gt;
            &lt;xsd:choice maxOccurs=&quot;2&quot;&gt;
                &lt;xsd:element name=&quot;a&quot; type=&quot;aの型&quot; /&gt;
                &lt;xsd:element name=&quot;b&quot; type=&quot;bの型&quot; /&gt;
            &lt;/xsd:choice&gt;
        &lt;/xsd:restriction&gt;
    &lt;/xsd:complexContent&gt;
&lt;/xsd:complexType&gt;}}
sequenceであるxはa、bの順に登場したら1回ですが，choiceであるyはa、bのどちらかが登場したら1回です。
#codehighlight(XML){{
&lt;x&gt;
    &lt;a /&gt;
    &lt;b /&gt; &lt;!-- これで1回 --&gt;
    &lt;a /&gt;
    &lt;b /&gt; &lt;!-- これで2回 --&gt;
&lt;/x&gt;

&lt;y&gt;
    &lt;a /&gt; &lt;!-- これで1回 --&gt;
    &lt;b /&gt; &lt;!-- これで2回 --&gt;
    &lt;b /&gt; &lt;!-- これで3回。最大出現回数を超えているのでこのXMLはエラーになる --&gt;
&lt;/y&gt;}}

もし、この要素は出現しなくても良いというように，各要素に対して出現回数を指定したい場合は，各要素に対してminOccursやmaxOccurs属性を指定します。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;x&quot;&gt;
    &lt;xsd:sequence&gt;
        &lt;xsd:element name=&quot;a&quot; minOccurs=&quot;0&quot;/&gt;
        &lt;xsd:element name=&quot;b&quot; /&gt;
    &lt;/xsd:sequence&gt;
&lt;/xsd:complexType&gt;}}

*****complexContentの省略
sequence、choice、allを使用する場合、complexContentとrestrictionを省略できます。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;x&quot;&gt;
    &lt;xsd:complexContent&gt;
        &lt;xsd:restriction base=&quot;xsd:anyType&quot;&gt;
            &lt;xsd:sequence&gt;
                &lt;xsd:element name=&quot;a&quot; /&gt;
            &lt;/xsd:sequence&gt;
        &lt;/xsd:restriction&gt;
    &lt;/xsd:complexContent&gt;
&lt;/xsd:complexType&gt;

&lt;!-- 上のxと下のyの意味は同じです --&gt;

&lt;xsd:complexType name=&quot;y&quot;&gt;
    &lt;xsd:sequence&gt;
        &lt;xsd:element name=&quot;a&quot; /&gt;
    &lt;/xsd:sequence&gt;
&lt;/xsd:complexType&gt;}}

****属性の定義
属性を定義するにはattribute要素を追加します。
#codehighlight(XML){{
&lt;xsd:attribute name=&quot;属性名&quot; type=&quot;属性値の型&quot; /&gt;}}
属性を単純型を持つ複合型に定義する場合は「既存の単純型に属性を追加する」という拡張を行います。
#codehighlight(XML){{
&lt;xsd:complexType&gt;
    &lt;xsd:simpleContent&gt;
        &lt;xsd:extension base=&quot;既存の型&quot;&gt;
            &lt;!-- 既存の型に属性を追加拡張 --&gt;
            &lt;xsd:attribute name=&quot;属性名&quot; type=&quot;属性値の型&quot; /&gt;
        &lt;/xsd:extension&gt;
    &lt;/xsd:simpleContent&gt;
&lt;/xsd:complexType&gt;}}
属性を複合型を持つ複合型に定義する場合は、単純型と同じく既存の複合型を拡張する、あるいは「何でもありのanyTypeの属性を定める」という制限により行います。
#codehighlight(XML){{
&lt;xsd:complexType&gt;
    &lt;xsd:complexContent&gt;
        &lt;xsd:restriction base=&quot;xsd:anyType&quot;&gt;
            &lt;xsd:sequence&gt; … &lt;/xsd:sequence&gt;
            &lt;xsd:attribute name=&quot;属性名&quot; type=&quot;属性値の型&quot; /&gt;
        &lt;/xsd:restriction&gt;
    &lt;/xsd:complexContent&gt;
&lt;/xsd:complexType&gt;

&lt;!-- complexContentが省略された場合 --&gt;
&lt;xsd:complexType name=&quot;型名&quot;&gt;
    &lt;xsd:sequence&gt; … &lt;/xsd:sequence&gt;
    &lt;xsd:attribute name=&quot;属性名&quot; type=&quot;属性値の型&quot; /&gt;
&lt;/xsd:complexType&gt;}}
省略可能な属性はuse=&quot;optional&quot;を指定します。省略された場合のデフォルト値を指定できます。
#codehighlight(XML){{
&lt;xsd:attribute name=&quot;属性名&quot; type=&quot;属性値の型&quot; use=&quot;optional&quot; default=&quot;デフォルト値&quot; /&gt;}}

*****属性の参照とグループ化
複数箇所で使われるような属性はそれらを別に定義して参照することができます。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;型名&quot;&gt;
    &lt;xsd:sequence&gt; … &lt;/xsd:sequence&gt;
    &lt;xsd:attribute ref=&quot;参照する属性名&quot; /&gt;
&lt;/xsd:complexType&gt;

&lt;xsd:attribute name=&quot;属性名&quot; type=&quot;属性値の型&quot; /&gt;}}
また、常にセットで扱われるような属性がある場合、それらをグループ化することができます。
#codehighlight(XML){{
&lt;xsd:complexType name=&quot;型名&quot;&gt;
    &lt;xsd:sequence&gt; … &lt;/xsd:sequence&gt;
    &lt;xsd:attributeGroup ref=&quot;参照する属性グループ名&quot; /&gt;
&lt;/xsd:complexType&gt;

&lt;xsd:attributeGroup name=&quot;属性グループ名&quot;&gt;
    &lt;xsd:attribute name=&quot;属性1&quot;/&gt;
    &lt;xsd:attribute name=&quot;属性2&quot;/&gt;
&lt;/xsd:attributeGroup&gt;}}

----

#comment()

----

&amp;tags()

&amp;br()&amp;br()&amp;br()&amp;br()&amp;br()    </description>
    <dc:date>2011-11-14T18:42:55+09:00</dc:date>
    <utime>1321263775</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/34.html">
    <title>MISC/フーリエ級数展開</title>
    <link>https://w.atwiki.jp/nina_a/pages/34.html</link>
    <description>
      *フーリエ級数展開
#right(){&amp;link_edit(text=このページを編集)}

**目次
#contents(fromhere=true)

//
//
//
//
//
//
//
**概要
　フーリエ級数展開とは、『複雑な波形でも単純な波形の合成によっている』という考え方を利用して、ある波形を三角関数（サインとコサイン）のみを用いて表すことをいう。
　周期$$T_0$$の関数$$f(t)$$は以下のように表現できる。
#divclass(point){{{$$f(x)=A_0+\sum_{n=1}^{\infty}\left(A_n\cos(n\omega_0 x)+B_n\sin(n\omega_0x)\right)$$
$$A_0=\frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(x)\,\mathrm{dx}$$
$$A_n=\frac{2}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(x)\cos(n\omega_0x)\,\mathrm{dx}$$
$$B_n=\frac{2}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(x)\sin(n\omega_0x)\,\mathrm{dx}$$
　$$(n=1,2,3,\cdots)$$、$$\omega_0=\frac{2\pi}{T_0}$$}}}

#divclass(cimage){{{#image(Fourier2.png,width=488,height=362)図・単純な波形の組み合わせによって構成されている波形（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier2.eps}）}}}

#divclass(cimage){{{#image(Fourier1.png,width=361,height=267)図・複雑な波形（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier1.eps}）}}}

***参考例
　$$f(x)=(-1)^{\lceil x \rceil}x+(-1)^{\lfloor x\rfloor}(1+2\lfloor x\rfloor)$$という関数をフーリエ級数展開する。
#divclass(cimage){{{#image(Fourier3.png,width=483,height=351)図・フーリエ級数展開する関数}}}
　結果は、
$$f(x)=\sum_{n=1}^{\infty}a_n\cos(nx)$$
$$a_n=\begin{cases}\dfrac{8}{n^2\pi^2} \qquad \mathit{(if\,n\,is\,an\,odd\,number)} \\ 0 \qquad\qquad \mathit{(otherwise)} \end{cases}$$
となる。
#divclass(info){{{※途中計算については&amp;link_anchor(id_ea1a66e9,pageid=34){解説内の参考例}に記してある。}}}
　計算機上では無限大までの和を求めることは出来ないため、途中で計算を打ち切ることになる。
　n=5で打ち切った場合のグラフは以下のようになる。
#divclass(cimage){{{#image(Fourier4.png,width=475,height=360)図・フーリエ級数展開した結果（n=5で打ち切り）（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier4.eps}）}}}

　n=25で打ち切った場合のグラフは以下のようになる。
#divclass(cimage){{{#image(Fourier5.png,width=474,height=360)図・フーリエ級数展開した結果（n=25で打ち切り）（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier5.eps}）}}}

//
//
//
//
//
//
//
**解説
　『任意の周期信号は、直流成分（いわば平均）と基本波成分と高調波成分（基本波の周波数を定数倍した物）の和から構成される。すなわち、
#divclass(point){{{（任意の周期信号）＝（直流成分）＋（基本波成分）＋（２倍高調波成分）＋（３倍高調波成分）＋…}}}
が成り立つ。
　フーリエ級数展開では基本波として正弦波と余弦波を用いる。よって、フーリエ級数展開は以下のように表される。
#divclass(point){{{$$f(t)=A_0\cdot 1+\sum_{n=1}^{\infty}\left(A_n\cos(n\omega_0 t)+B_n\sin(n\omega_0t)\right)$$}}}
#divclass(info){{{※フーリエ級数展開において（私の身の回りでは）横軸に時間tを取ることが多いため以降の説明では変数としてtを用いる。
}}}
　なお、$$\omega_0$$とは基本角周波数（基本波の角周波数の意、角周波数は角速度とも言う）であり、$$\omega_0=\frac{2\pi}{T_0}$$である。同様に、$$T_0$$は基本周期、$$f_0$$は基本周波数であり、$$f_0=\frac{1}{T_0}$$である。
#divclass(info){{{{※$$\omega_0=\frac{2\pi}{T_0}$$という関係は、フーリエ級数展開する関数の周期と基本波の周期の関係から導出される。
　tが0から$$T_0$$まで一周期分変化するとき、基本波$$\sin(\omega_0t)$$と$$\cos(\omega_0t)$$も一周期分変化する必要がある。
#center(){{{|$$t$$|$$0\rightarrow T_0$$|
|$$\omega_0t$$|$$0\rightarrow 2\pi$$|}}}
だから、$$\omega_0T_0=2\pi$$であることが分かる。
#divclass(cimage){{{#image(Fourier6.png,width=480,height=360)図・周期$$T_0$$の波と基本正弦波}}}
}}}}
　ここで、$$A_0$$、$$A_n$$、$$B_n$$を求めるために&amp;link_anchor(id_b16e02b0,pageid=35){直交関数系}の性質を用いる。フーリエ級数展開とはある関数を関数列$$\left\{1, \cos(\omega_0t), \cos(2\omega_0t), \cdots,\sin(\omega_0t), \sin(2\omega_0t), \cdots\right\}$$の和で表すことであった。この関数列（$$\left\{1,\cos(n\omega_0t),\sin(n\omega_0t)\right\} \quad (n\in\mathbb{Z}^+)$$）は実は直交系を成しているのである。
#divclass(info){{{※この関数列が本当に直交系を成しているかどうかの確認は省略する。偶関数、奇関数の性質を利用すれば容易に証明可能である。}}}
　直交関数系の性質を用いると、$$A_0$$、$$A_n$$、$$B_n$$を綺麗に求めることが出来る。実際に$$f(t)$$と$$\cos(n\omega_0t)$$の内積を取ると下図のようになり、$$A_n$$の項のみ残り、他の項は全て0になる。
#divclass(cimage){{{#image(Fourier7.png,width=632,height=191)図・$$f(t)$$と$$\cos(n\omega_0t)$$の内積（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier7.eps}）}}}
　上図から$$A_n=\frac{\langle f(t),\cos(n\omega_0t)\rangle}{\langle\cos(n\omega_0t),\cos(n\omega_0t)\rangle}$$となる。同様にして$$f(t)$$と$$1$$の内積から$$A_0$$が、$$f(t)$$と$$\sin(n\omega_0t)$$の内積から$$B_n$$が求められる。それぞれ以下のようになる。
$$A_0=\frac{\langle f(t),1\rangle}{\langle 1,1\rangle}$$
$$B_n=\frac{\langle f(t),\sin(n\omega_0t)\rangle}{\langle\sin(n\omega_0t),\sin(n\omega_0t)\rangle}$$

　内積の定義からこれを積分で表し、計算可能な所を計算すると、概要で示した式が得られる。
#divclass(point){{{{$$f(x)=A_0+\sum_{n=1}^{\infty}\left(A_n\cos(n\omega_0 x)+B_n\sin(n\omega_0x)\right)$$
$$A_0=\frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(x)\,\mathrm{dx}$$
$$A_n=\frac{2}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(x)\cos(n\omega_0x)\,\mathrm{dx}$$
$$B_n=\frac{2}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(x)\sin(n\omega_0x)\,\mathrm{dx}$$
　$$(n=1,2,3,\cdots)$$、$$\omega_0=\frac{2\pi}{T_0}$$}}}}
#divclass(info){{{※ここでは内積の計算結果のみ記しておく。
$$\langle 1,1 \rangle = T_0$$
$$\langle\cos(n\omega_0t),\cos(n\omega_0t)\rangle=\frac{T_0}{2}$$
$$\langle\sin(n\omega_0t),\sin(n\omega_0t)\rangle=\frac{T_0}{2}$$
}}}
　なお、フーリエ級数展開は以下のように書かれることもある。
#divclass(point){{{{$$f(x)=\frac{A_0}{2}+\sum_{n=1}^{\infty}\left(A_n\cos(n\omega_0 x)+B_n\sin(n\omega_0x)\right)$$
$$A_n=\frac{2}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(x)\cos(n\omega_0x)\,\mathrm{dx}\quad(n=0,1,2,\cdots)$$
$$B_n=\frac{2}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(x)\sin(n\omega_0x)\,\mathrm{dx}\quad(n=1,2,3,\cdots)$$
$$\omega_0=\frac{2\pi}{T_0}$$}}}}
#divclass(info){{{※上記の式は定数関数1を$$\cos(0)$$と見なして表した物である。}}}

***参考例
　概要の参考例として扱った関数$$f(x)=(-1)^{\lceil x \rceil}x+(-1)^{\lfloor x\rfloor}(1+2\lfloor x\rfloor)$$のフーリエ級数展開の計算過程をここに記す。
#divclass(cimage){{{#image(Fourier3.png,width=483,height=351)図・フーリエ級数展開する関数（再掲）}}}
　図から、周期は2であることが分かる。

　$$A_0$$は、$$f(x)\cdot 1$$が偶関数であることから
$$A_0=\frac{1}{2}\int_{-1}^{1}f(x)\cdot 1\,\mathrm{dx}$$
　$$=\int_{-1}^0(2x+1)\,\mathrm{dx}$$
　$$=0$$

　つづいて、$$A_n$$は、
$$A_n=\dfrac{2}{2}\int_{-1}^1 f(x)\cdot\cos(n\pi x)\,\mathrm{dx}$$
$$f(x)\cos(n\pi x)$$は偶関数であるから
$$A_n=2\int_{-1}^0(2x+1)\cos(n\pi x)\,\mathrm{dx}$$
　$$=\frac{2}{n\pi}\left[(2x+1)\sin(n\pi x)\right]_{-1}^0-\frac{4}{n\pi}\int_{-1}^0\sin(n\pi x)\,\mathrm{dx}$$
　$$=0-\frac{4}{n^2\pi^2}\left[-\cos(n\pi x)\right]_{-1}^0$$
　$$=\begin{cases}\dfrac{8}{n^2\pi^2} \qquad \mathit{(if\,n\,is\,an\,odd\,number)} \\ 0 \qquad\qquad \mathit{(otherwise)} \end{cases}$$

　$$B_n$$は$$f(x)\sin(n\pi x)$$が奇関数であることから、
$$B_n=\frac{2}{2}\int_{-1}^1 f(x)\cdot\sin(n\pi x)\,\mathrm{dx}$$
　$$=0$$

//
//
//
//
//
//
//
**複素指数関数表現によるフーリエ級数展開
　複素指数関数とは底がネイピア数$$e$$であり、指数が虚数である関数$$e^{ix}$$である。
　複素指数関数のマクローリン展開から以下の関係が導かれる。
$$e^{ix}=\cos(x)+i\sin(x)$$
#divclass(info){{{※この計算については省略する。}}}
　ここでcis関数を以下のように定義する。
$$\mathrm{cis}(x)\equiv\cos(x)+i\sin(x)$$
　すなわち$$e^{ix}=\mathrm{cis}(x)$$である。
　この定義から、
$$\cos(x)=\frac{\mathrm{cis}(x)+\mathrm{cis}(-x)}{2},\quad\sin(x)=\frac{\mathrm{cis}(x)-\mathrm{cis}(-x)}{2i}$$
であることが分かる。これをフーリエ級数展開の式に代入し整理する（下図）。
#divclass(cimage){{{#image(Fourier8.png,width=551,height=325)図・複素指数関数をフーリエ級数展開に適用（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier8.eps}）}}}
　これで複素指数関数によりフーリエ級数展開を表現する事が出来た。
$$f(t)=\sum_{n=-\infty}^{\infty}C_n\cdot\mathrm{cis}(n\omega_0x)$$
　三角関数による表現よりも簡潔になっていることが分かる。ただ$$C_n$$がごちゃごちゃしているので、それぞれ計算してみる。
　１）　ｎ＞０の時
$$C_n=\frac{1}{2}\left\{\frac{2}{T_0}\left\langle f(t),\cos(n\omega_0 t) \right\rangle-\frac{2i}{T_0}\left\langle f(t),\sin(n\omega_0 t) \right\rangle\right\}$$
　$$=\frac{1}{T_0}\left\langle f(t),\cos(n\omega_0 t)-i\sin(n\omega_0t)\right\rangle$$
　$$=\frac{1}{T_0}\left\langle f(t),\cos(-n\omega_0 t)+i\sin(-n\omega_0t)\right\rangle$$
　$$=\frac{1}{T_0}\left\langle f(t),\mathrm{cis}(-n\omega_0 t)\right\rangle$$
　２）　ｎ＝０の時
$$C_n=\frac{1}{T_0}\left\langle f(t),1 \right\rangle$$
　$$=\frac{1}{T_0}\left\langle f(t),\mathrm{cis}(0)\right\rangle$$
　３）　ｎ＜０の時
$$C_n=\frac{1}{2}\left\{\frac{2}{T_0}\left\langle f(t),\cos(n\omega_0 t) \right\rangle+\frac{2i}{T_0}\left\langle f(t),\sin(n\omega_0 t) \right\rangle\right\}$$
　$$=\frac{1}{T_0}\left\langle f(t),\cos(n\omega_0 t)+i\sin(n\omega_0t)\right\rangle$$
　$$=\frac{1}{T_0}\left\langle f(t),\mathrm{cis}(n\omega_0 t)\right\rangle$$

　これらより、
$$C_n=\frac{\langle f(t),\mathrm{cis}(-n\omega_0t)\rangle}{\langle f(t),\mathrm{cis}(0)\rangle}$$
　$$=\frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} f(t)\cdot\mathrm{cis}(-n\omega_0 t)\,\mathrm{dx}$$
となる。
　以上をまとめると、複素指数関数を用いたフーリエ級数展開は、
#divclass(point){{{$$f(t)=\sum_{n=-\infty}^{\infty}C_n\cdot\mathrm{cis}(n\omega_0t)$$
$$C_n=\frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(t)\cdot\mathrm{cis}(-n\omega_0t)\,\mathrm{dx}$$}}}
となり、三角級数に比べるとかなり簡単に記述が可能である。
#divclass(info){{{※ただし、$$\mathrm{cis}(x)$$は奇関数でも偶関数でもないため、手計算の場合は計算が面倒になる場合がある。}}}

***方形波のフーリエ級数展開
　下図のような方形波のフーリエ級数展開を行う。
#divclass(cimage){{{#image(Fourier9.png,width=482,height=356)図・方形波（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier9.eps}）}}}
　まず、直流成分は
$$C_0=\frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(t)\cdot 1\,\mathrm{dt}$$
　$$=\frac{1}{T_0}\int_{-\tau}^{\tau}1\,\mathrm{dt}$$
　$$=\frac{2\tau}{T_0}$$
　続いて、n倍高調波成分は
$$C_n=\frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(t)\mathrm{cis}(n\omega_0t)\,\mathrm{dt}$$
　$$=\frac{1}{T_0}\int_{-\tau}^{\tau}\mathrm{cis}(n\omega_0 t)\,\mathrm{dt}$$
　$$=\frac{1}{T_0}\frac{1}{-in\omega_0}\left(\mathrm{cis}(-n\omega_0\tau)-\mathrm{cis}(n\omega_0 \tau)\right)$$
　$$=-\frac{1}{in2\pi}(-2i\sin(n\omega_0\tau))$$
　$$=\frac{1}{n\pi}\sin(n\omega_0\tau)$$
#divclass(info){{{※cis関数の微分・積分
$$\frac{\mathrm{d}}{\mathrm{dx}}\mathrm{cis}(x)=i\mathrm{cis}(x)$$
$$\int\mathrm{cis}(x)\,\mathrm{dx}=\frac{1}{i}\mathrm{cis}(x)+C$$}}}
　以上より方形波のフーリエ級数展開係数は、
$$C_n=\begin{cases}\frac{2\tau}{T_0} \qquad\qquad\qquad (n=0) \\ \frac{1}{n\pi}\sin(n\omega_0\tau) \quad (\mathit{otherwise})\end{cases}$$
となった。方形波は無限倍の高調波成分まで含まれるため、計算機上ではある所までの高調波までで打ち切ることになる。打ち切り時に誤差が生じる現象をギプス現象という。もちろん、高い周波数成分まで加算した方がギプス現象は小さくなる。
#divclass(cimage){{{#image(Fourier10.png,width=483,height=350)図・ギプス現象（$$T_0=4,\,\tau=1$$とした）（&amp;link(拡大){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier10L.png}）（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier10.eps}）}}}
#divclass(cimage){{{#image(Fourier11.png,width=484,height=357)図・10000倍高調波までの加算（$$T_0=4,\,\tau=1$$とした）（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier11.eps}）}}}

**周波数スペクトル
　上で得られたフーリエ級数展開係数$$C_n$$を図示すると以下のようになる。なお、下図には関数$$f(x)=\frac{\sin(x\pi/2)}{x\pi}$$も一緒に図示した。
#divclass(cimage){{{#image(Fourier12.png,width=485,height=350)図・フーリエ級数展開係数（&amp;link(EPS){http://www27.atwiki.jp/nina_a?cmd=upload&amp;act=open&amp;pageid=34&amp;file=Fourier12.eps}）}}}
　上の図は各周波数成分がどれだけ含まれているかを示している。このような図を周波数スペクトル、あるいは、単にスペクトルという。

----

#center(){カテゴリ：[[MISC&gt;&gt;Category:MISC]]}

#pcomment()

&amp;br()&amp;br()&amp;br()&amp;br()&amp;br()    </description>
    <dc:date>2011-11-14T18:40:10+09:00</dc:date>
    <utime>1321263610</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/57.html">
    <title>WPF/アニメーション</title>
    <link>https://w.atwiki.jp/nina_a/pages/57.html</link>
    <description>
      *アニメーション
#right(){&amp;link_edit(text=このページを編集)}

**概要
[[WPF]]では，マージンなどの見た目に関わるプロパティの値を順次変化させることでアニメーションを実現する．

**XxxAnimationクラス
WPFには時間の経過に応じて値を変化させるXxxAnimationクラスが用意されている．Xxxには変化させる値のタイプが入り，double型を変化させる場合にはDoubleAnimationクラスを利用する．

#region(DoubleAnimationサンプル)
#codehighlight(XML){{
&lt;Window x:Class=&quot;WpfSampleApplication.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        Title=&quot;MainWindow&quot; Height=&quot;350&quot; Width=&quot;525&quot;&gt;
    &lt;StackPanel&gt;
        &lt;Button Width=&quot;200&quot; Height=&quot;100&quot;&gt;
            アニメーションテスト
            &lt;Button.Triggers&gt;
                &lt;EventTrigger RoutedEvent=&quot;MouseEnter&quot;&gt;
                    &lt;BeginStoryboard&gt;
                        &lt;Storyboard&gt;
                            &lt;DoubleAnimation To=&quot;300&quot; Duration=&quot;0:0:2&quot;
                                             Storyboard.TargetProperty=&quot;(Button.Width)&quot; /&gt;
                        &lt;/Storyboard&gt;
                    &lt;/BeginStoryboard&gt;
                &lt;/EventTrigger&gt;
                &lt;EventTrigger RoutedEvent=&quot;MouseLeave&quot;&gt;
                    &lt;BeginStoryboard&gt;
                        &lt;Storyboard&gt;
                            &lt;DoubleAnimation To=&quot;200&quot; Duration=&quot;0:0:2&quot;
                                             Storyboard.TargetProperty=&quot;(Button.Width)&quot; /&gt;
                        &lt;/Storyboard&gt;
                    &lt;/BeginStoryboard&gt;
                &lt;/EventTrigger&gt;
            &lt;/Button.Triggers&gt;
        &lt;/Button&gt;
    &lt;/StackPanel&gt;
&lt;/Window&gt;}}
#endregion

***主な依存プロパティ

|From|アニメーションの開始値．指定しない場合は現在の値．|
|To|アニメーションの終了値．指定しない場合は既定の（オリジナルの）値．|
|By|アニメーションの変量．From+By=To．ToとByの両方が指定された場合はToが優先．|
|Duration|アニメーションの時間．Duration.Foreverで永遠に続く（無限大の時間の）アニメーション．Foreverを指定すると，無限大の時間をかけてFromからTo，Byまでアニメーションするため，変化しているように見えない．無限回続くアニメーションの意味ならばRepeatBehaviorにRepeatBehavior.Foreverをセットする．|

***主なプロパティ

|AccelerationRatio|Dulationの内，加速に使う時間の割合．DecelerationRatioとの和が1を超えてはいけない．|
|AutoReverse|trueなら，アニメーション終了後，逆再生する|
|FillBehavior|アニメーション終了時の動作指定．既定は保留（アニメーション終了時の値を維持）．Stopを指定すると終了（アニメーション終了時の値を破棄）する．|
|DecelerationRatio|Dulationの内，減速に使う時間の割合．AccelerationRatioとの和が1を超えてはいけない．|
|RepeatBehavior|アニメーションの繰り返し動作指定．既定は1回実行．回数や実行時間で指定．|
|SpeedRatio|アニメーションの速度．5を指定すれば5倍の早さ．|

**ストーリーボード（Storyboard）
アニメーションの対象（TargetNameとTargetProperty）をStoryboardで指定する．複数XxxAnimationを記述すれば，それらを同時実行できる．
#region(Storyboardサンプル)
#codehighlight(XML){{
&lt;Storyboard&gt;
    &lt;DoubleAnimation To=&quot;300&quot; Duration=&quot;0:0:2&quot;
                     AccelerationRatio=&quot;0.2&quot; DecelerationRatio=&quot;0.2&quot;
                     Storyboard.TargetProperty=&quot;(Button.Width)&quot; /&gt;
    &lt;DoubleAnimation To=&quot;300&quot; Duration=&quot;0:0:2&quot;
                     AccelerationRatio=&quot;0.2&quot; DecelerationRatio=&quot;0.2&quot;
                     Storyboard.TargetProperty=&quot;(Button.Height)&quot; /&gt;
&lt;/Storyboard&gt;}}
#endregion
この例ではTargetPropertyを各アニメーションごとに指定しており，TargetNameは指定していない．

**アニメーションを制御する
止めたり，リスタートしたり．それぞれのボタンのトリガーでPauseStoryBoardとかやってもBeginStoryBoardが見つからないので止まらない．なのでその親要素のStackPanelでまとめて記述．他の操作は[[MSDN&gt;&gt;http://msdn.microsoft.com/ja-jp/library/ms744905.aspx]]参照．再生速度とかもっと細かい制御はXAMLでは無理．
#region(アニメーション制御サンプル)
#codehighlight(XML){{
&lt;Window x:Class=&quot;WpfSampleApplication.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        Title=&quot;MainWindow&quot; Height=&quot;400&quot; Width=&quot;500&quot;&gt;
    &lt;Grid&gt;
        &lt;Grid.RowDefinitions&gt;
            &lt;RowDefinition Height=&quot;*&quot; /&gt;
            &lt;RowDefinition Height=&quot;Auto&quot; /&gt;
        &lt;/Grid.RowDefinitions&gt;
        
        &lt;Button Width=&quot;200&quot; Height=&quot;100&quot; Name=&quot;dest&quot; Grid.Row=&quot;0&quot;&gt;
            アニメーションテスト
        &lt;/Button&gt;
        &lt;StackPanel Orientation=&quot;Horizontal&quot; Grid.Row=&quot;1&quot; HorizontalAlignment=&quot;Center&quot;&gt;
            &lt;Button Width=&quot;100&quot; Margin=&quot;5&quot; Content=&quot;開始&quot; Name=&quot;start&quot; /&gt;
            &lt;Button Width=&quot;100&quot; Margin=&quot;5&quot; Content=&quot;停止&quot; Name=&quot;pause&quot; /&gt;
            &lt;Button Width=&quot;100&quot; Margin=&quot;5&quot; Content=&quot;再開&quot; Name=&quot;resume&quot; /&gt;
            &lt;Button Width=&quot;100&quot; Margin=&quot;5&quot; Content=&quot;終了&quot; Name=&quot;stop&quot; /&gt;
            
            &lt;StackPanel.Triggers&gt;
                &lt;EventTrigger RoutedEvent=&quot;Button.Click&quot; SourceName=&quot;start&quot;&gt;
                    &lt;BeginStoryboard x:Name=&quot;animation&quot;&gt;
                        &lt;Storyboard Storyboard.TargetName=&quot;dest&quot;&gt;
                            &lt;DoubleAnimation To=&quot;300&quot; Storyboard.TargetProperty=&quot;(Button.Width)&quot; FillBehavior=&quot;Stop&quot;  Duration=&quot;0:0:15&quot;/&gt;
                            &lt;DoubleAnimation To=&quot;300&quot; Storyboard.TargetProperty=&quot;(Button.Height)&quot; FillBehavior=&quot;Stop&quot;  Duration=&quot;0:0:15&quot;/&gt;
                        &lt;/Storyboard&gt;
                    &lt;/BeginStoryboard&gt;
                &lt;/EventTrigger&gt;
                &lt;EventTrigger RoutedEvent=&quot;Button.Click&quot; SourceName=&quot;pause&quot;&gt;
                    &lt;PauseStoryboard BeginStoryboardName=&quot;animation&quot;/&gt;
                &lt;/EventTrigger&gt;
                &lt;EventTrigger RoutedEvent=&quot;Button.Click&quot; SourceName=&quot;resume&quot;&gt;
                    &lt;ResumeStoryboard BeginStoryboardName=&quot;animation&quot;/&gt;
                &lt;/EventTrigger&gt;
                &lt;EventTrigger RoutedEvent=&quot;Button.Click&quot; SourceName=&quot;stop&quot;&gt;
                    &lt;StopStoryboard BeginStoryboardName=&quot;animation&quot;/&gt;
                &lt;/EventTrigger&gt;
            &lt;/StackPanel.Triggers&gt;
        &lt;/StackPanel&gt;
    &lt;/Grid&gt;
&lt;/Window&gt;}}
#endregion

**イージング（Easing）
イージングを使うと値の変化の仕方を変えることができる．全てのEasingFunctionについては[[MSDN&gt;&gt;http://msdn.microsoft.com/ja-jp/library/system.windows.media.animation.easingfunctionbase.aspx]]参照．
#region(イージング関数にPowerEaseを指定するサンプル)
#codehighlight(linenumber, XML){{
&lt;DoubleAnimation To=&quot;300&quot; Storyboard.TargetProperty=&quot;(Button.Width)&quot; Duration=&quot;0:0:2&quot;&gt;
    &lt;DoubleAnimation.EasingFunction&gt;
        &lt;PowerEase EasingMode=&quot;EaseInOut&quot; Power=&quot;2&quot; /&gt;
    &lt;/DoubleAnimation.EasingFunction&gt;
&lt;/DoubleAnimation&gt;}}
#endregion

すべてのEasingFunctionはEasingModeというプロパティを持っている．
|EaseIn|アニメーション開始付近でイージングする|
|EaseOut|アニメーション終了付近でイージングする|
|EaseInOut|アニメーション開始と終了付近の両方でイージングする|

**キーフレーム指定によるアニメーション
XxxAnimationの変わりにXxxAnimationUsingKeyFrameを使うと，指定の時刻（キーフレーム）における値を指定することでアニメーションを実現できる．
#region(キーフレーム指定によるアニメーション)
#codehighlight(linenumber, XML){{
&lt;DoubleAnimationUsingKeyFrames  Storyboard.TargetProperty=&quot;(Button.Width)&quot;&gt;
    &lt;LinearDoubleKeyFrame Value=&quot;300&quot; KeyTime=&quot;0:0:1&quot;/&gt;
    &lt;DiscreteDoubleKeyFrame Value=&quot;200&quot; KeyTime=&quot;0:0:2&quot; /&gt;
    &lt;SplineDoubleKeyFrame Value=&quot;100&quot; KeyTime=&quot;0:0:3&quot; /&gt;
    &lt;EasingDoubleKeyFrame Value=&quot;300&quot; KeyTime=&quot;0:0:4&quot; &gt;
        &lt;EasingDoubleKeyFrame.EasingFunction&gt;
            &lt;BounceEase /&gt;
        &lt;/EasingDoubleKeyFrame.EasingFunction&gt;
    &lt;/EasingDoubleKeyFrame&gt;
&lt;/DoubleAnimationUsingKeyFrames&gt;}}
#endregion
キーフレームを指定するときにはYyyXxxKeyFrameを使う．Yyyにはそのキーフレームまでの値の変化の仕方が入り，Linear（直線），Discrete（不連続），Spline（スプライン），Easing（指定のイージング関数）の4種類．
このサンプルでは，1秒経過まで直線的に300まで変化し，2秒経過した瞬間に200に変化，3秒経過までスプライン曲線を描いて100まで変化，その後EasingFunctionに指定されたBounceEaseを使って300まで変化する．

----

#center(){カテゴリ：[[WPF&gt;&gt;Category:WPF]]}

#pcomment()

&amp;br()&amp;br()&amp;br()&amp;br()&amp;br()    </description>
    <dc:date>2011-05-31T14:58:55+09:00</dc:date>
    <utime>1306821535</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/nina_a/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/nina_a/pages/1.html</link>
    <description>
      *メモ帳ブログ@wikiへようこそ

-このwikiは[[メモ帳ブログ&gt;&gt;http://ticklerfile.blog.shinobi.jp/]]で書いたことをまとめた物です。
-個人が適当に調べた物なので正しいか分かりません。
-利用は自己責任でお願いします。
-もし間違いがありましたら、下のコメント、twitter、メールでお願いします。
-twitterは&amp;html(&lt;a href=&quot;http://www.twitter.com/nna17th&quot;&gt;nna17th &lt;img src=&quot;http://twitter-badges.s3.amazonaws.com/t_mini-b.png&quot; alt=&quot;nna17thをフォローしましょう&quot;/&gt;&lt;/a&gt;)
-メールアドレスはnna17th.gmail@com（&amp;u(){.と@を入れ替えてください}）

----

#comment_num2(log=comment,namebr,vsize=6,size=60,nsize=30,below,num=30)

&amp;br()&amp;br()&amp;br()&amp;br()&amp;br()    </description>
    <dc:date>2011-05-18T13:16:39+09:00</dc:date>
    <utime>1305692199</utime>
  </item>
  </rdf:RDF>
