Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2750 / 13645 ツリー ←次へ | 前へ→

【66158】二次元配列上に傾いた楕円を描画したい 10/8/6(金) 2:36 質問[未読]
【66159】Re:二次元配列上に傾いた楕円を描画したい SS 10/8/6(金) 9:25 発言[未読]
【66187】Re:二次元配列上に傾いた楕円を描画したい 10/8/6(金) 19:59 発言[未読]
【66189】Re:二次元配列上に傾いた楕円を描画したい hogeratta 10/8/6(金) 20:54 発言[未読]
【66191】Re:二次元配列上に傾いた楕円を描画したい 10/8/7(土) 4:31 発言[未読]
【66208】Re:二次元配列上に傾いた楕円を描画したい 10/8/9(月) 2:45 回答[未読]

【66158】二次元配列上に傾いた楕円を描画したい
質問    - 10/8/6(金) 2:36 -

引用なし
パスワード
   ピンボールを作ってるんですが傾いた楕円弧の描画がさっぱりわかりません
円と左右対象の楕円の描画は検索して方法がわかったんですが
傾いた楕円にそのアルゴリズムが使えませんでした

何かいい方法があれば教えてください

【66159】Re:二次元配列上に傾いた楕円を描画したい
発言  SS  - 10/8/6(金) 9:25 -

引用なし
パスワード
   ▼芋 さん:

「傾いた」が二次元、三次元どちらか分かりませんが何れにしろ
>円と左右対象の楕円の描画は検索して方法がわかったんですが
で得た座標をもう一度三角関数を使って変換するのが簡単ではないでしょうか。

二次元配列上に傾いた楕円を描画の題意がピンときません。
もう少し出来ている部分の情報があると回答できるかもしれません。

>ピンボールを作ってるんですが傾いた楕円弧の描画がさっぱりわかりません
>円と左右対象の楕円の描画は検索して方法がわかったんですが
>傾いた楕円にそのアルゴリズムが使えませんでした
>
>何かいい方法があれば教えてください

【66187】Re:二次元配列上に傾いた楕円を描画したい
発言    - 10/8/6(金) 19:59 -

引用なし
パスワード
   ▼SS さん:

>「傾いた」が二次元、三次元どちらか分かりませんが
二次元です

>二次元配列上に傾いた楕円を描画の題意がピンときません。
>もう少し出来ている部分の情報があると回答できるかもしれません。

今作ってるやつです 円と線だけでできてます
ht tp://www42.atwiki.jp/syugyou?cmd=upload&act=open&pageid=243&file=nnn.xls

楕円も使いつつ当たり判定を二次元配列上に入れたいのです

円の描画はこうしてます(わかりやすくするためセルに描画してます)
Sub en(a, b, kaisix, kaisiy, ByVal x, ByVal y, Optional owariy = 0)
'a・b中心座標 kaisix・kaisiy描画開始座標 x終了X座標
'y終了Y座標(1か-1のみ 中心より上か下か)
Dim c, d, e, f, g, h, i, j, k
i = Abs(kaisix - a) ^ 2 + Abs(kaisiy - b) ^ 2
d = kaisix - a
e = kaisiy - b

Cells(a + d, b + e).Interior.Color = 0

For h = 0 To 10000

If d > 0 Then
j = -1
Else
j = 1
End If

If e > 0 Then
k = 1
Else
k = -1
End If

f = Abs((d ^ 2) + ((e + j) ^ 2) - i)
g = Abs(((d + k) ^ 2) + (e ^ 2) - i)
n = Abs(((d + k) ^ 2) + ((e + j) ^ 2) - i)

If f > g And n > g Then
d = d + k
ElseIf n > f Then
e = e + j
Else
e = e + j
d = d + k
End If

Cells(a + d, b + e).Interior.Color = 0

If a + d = x Then
If y = -1 Then
If e <= 0 Then Exit For
Else
If e >= 0 Then Exit For
End If
End If

Next

owariy = b + e
End Sub


Sub test()
en 50, 50, 30, 30, 60, -1
End Sub

これと同様に楕円を描画可能でしょうか
できればFor内でサインコサインを使わないで済めば幸いです
円の描画もより高速化できればご教授願います

【66189】Re:二次元配列上に傾いた楕円を描画したい
発言  hogeratta  - 10/8/6(金) 20:54 -

引用なし
パスワード
   回答がついている上に他サイトなのであれなんですが・・・。

参考です。

シェイプの座標を取得する
http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+201006/10060071.txt

【66191】Re:二次元配列上に傾いた楕円を描画したい
発言    - 10/8/7(土) 4:31 -

引用なし
パスワード
   ▼hogeratta さん:
>回答がついている上に他サイトなのであれなんですが・・・。
>
>参考です。
>
>シェイプの座標を取得する
>http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+201006/10060071.txt

レスありがとうございます
リンク先では楕円周座標を1度ごと計算していますが
これだと楕円が大きくなると隙間ができてしまいます
楕円周上を隙間なく埋める(かつできれば計算の少ない)
アルゴリズムをご教授願います

【66208】Re:二次元配列上に傾いた楕円を描画したい
回答    - 10/8/9(月) 2:45 -

引用なし
パスワード
   疑似楕円(Y^2)^0.5=((R^2)-(X^2))^0.5+Y*n で間に合わせました
ありがとうございました

Sub daen(a, b, kaisix, kaisiy, han, x, y, katamuki, Optional owarix = 0)
'ab中心 kaisix開始X座標(1か-1のみ)kaisiy開始Y座標 han半径
'x終了X座標(1か-1のみ)y終了Y座標 katamukiてっぺんがどれだけずれてるか

Dim c, d, e, f, g, h, i, j, k, maxkata, isbyouga As Boolean, l, m
i = han ^ 2
e = kaisiy - b
d = ((i - (kaisiy - b) ^ 2) ^ 0.5) * kaisix - _
katamuki * (b - kaisiy) / han
f = ((i - (kaisiy - b - kaisix) ^ 2) ^ 0.5) * kaisix - _
katamuki * (b - kaisiy - kaisix) / han
k = -1
If f > d Then k = 1

Cells(b + e, Int(a + d)).Interior.Color = 0

For h = 0 To 2000

If k = -1 Then
If d > -katamuki Then
j = -1
Else
j = 1
End If
Else
If d < katamuki Then
j = 1
Else
j = -1
End If
End If

c = katamuki * (e + j) / han
If Abs(e) <> han Then
f = Abs(((d - c + 1) ^ 2) + ((e + j) ^ 2) - i)
g = Abs(((d - c - 1) ^ 2) + ((e + j) ^ 2) - i)
If f < g Then
k = 1
Else
k = -1
End If
End If

f = Abs(((d - c) ^ 2) + ((e + j) ^ 2) - i)
g = Abs(((d + k - katamuki * e / han) ^ 2) + (e ^ 2) - i)

If f > g And m <> -k Then
d = d + k
m = k
Else
e = e + j
m = 0
End If

Cells(b + e, Int(a + d)).Interior.Color = 0

If b + e = y Then
If x = k Then Exit For
End If

Next

owarix = a + d
End Sub


Sub test()
Cells.Clear
daen 100, 100, 1, 120, 70, 1, 150, 24
End Sub

2750 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free