問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
レス数:6 / 状態:未解決 / No:32 / ATOM
1 名前:k 日付:2010/07/02(金)22:30:44 ID:9kJEWPZA4knz
こんにちは。

テキストエリアにユーザーが入力した数式を、
グラフにして表示するFlashをas3.0で組みたいのですが、
テキストで入力された数式をどのように処理すればいいか、見当がつきません。

たとえば、"x+y"(String)とテキストで入力されたら、x=1,y=2などの数を代入して、
3(Number)を返すような処理をしたいのです。
足し算のみならず、sinやlogなども実装したいと思っています。

as1.0でしたら、evalを使ってできると思うのですが…。

お知恵をお借りできたらと思います。
2 日付:2010/07/02(金)22:58:50 ID:yDl4tzgDJCHR
x と y という2つの変数がありますがこれは2つだけでなく無制限に増えますか?
変数名は自由に付けれますか?

対応する演算は + - * / ですか?
() はありますか?
3 日付:2010/07/02(金)23:14:15 ID:9kJEWPZA4knz
xyz立体のグラフを絵画する予定なので、x,y以外に変数は使いません。

演算は+ - * /と、累乗の意味として ^ を入れようと思っています。
()もつけたいと思っています。
また、sin,cos,logなど、基本的な数学の関数も使えるようにしようと思っています。
4 名前:1/2 日付:2010/07/03(土)08:13:12 ID:yDl4tzgDJCHR
まずは文字列から式の解析でしょうか。

var str:String = " (x + 5) / ((y - 2) * 10.123) + sin(x)";

var dictionary:Array = [
{word:"x",comment:"変数 x"},
{word:"y",comment:"変数 y"},
{word:"+",comment:"加算"},
{word:"-",comment:"減算"},
{word:"*",comment:"乗算"},
{word:"/",comment:"除算"},
{word:"^",comment:"累乗"},
{word:"(",comment:"("},
{word:")",comment:")"},
{word:"sin",comment:"サイン"},
{word:"cos",comment:"コサイン"},
{word:"log",comment:"自然対数"},
];

var i:uint = 0;
var p:uint = 0;// 文字の検索位置
var c:uint = 0;// 文字コード
var l:uint = str.length;// 文字のサイズ
while(true){

if(l <= p)break;

// 一文字取り出す
c = str.charCodeAt(p);

// 空白無視
if(c == 32){
p ++;
continue;
}
5 名前:2/2 日付:2010/07/03(土)08:13:31 ID:yDl4tzgDJCHR
// 数字検出
if(c >= 0x30 && c <= 0x39){

var b:uint = p;
p++;
while(true){
// 一文字取り出す
c = str.charCodeAt(p);

// 数字とピリオドを検出
var check:Boolean = false;
if(c >= 0x30 && c <= 0x39)check = true;
if(c == 46)check = true;
if(check){
p++;
continue;
}

break;
}

trace("数字:" + str.substring(b,p));

continue;
}

// 単語検出
for(i=0;i<dictionary.length;i++){
var page:Object = dictionary[i];
if(str.indexOf(page.word,p) == p){
p += page.word.length;
trace(page.comment);
break;
}
}
if(i < dictionary.length)continue;

trace("エラー");
break;
}
6 名前:k 日付:2010/07/03(土)12:03:43 ID:9kJEWPZA4knz
なるほど…道筋が見えてきました。
これを手がかりに、まずは自分で作成してみようと思います。

また分からないところがあったときは、ご指導よろしくお願いします。
このスレッドについて
質問の状態 :
未解決
投稿開始日 :
2010/07/02(金)22:30:44
投稿終了日 :
2010/07/03(土)12:03:43
投稿者 :
k
レス総数 :
6
スレッド番号 :
32
MondoCollectionSystem ver.0x00020000 by Hakuhin