私はいくつかのグラフィックスを表示する小さなアプリケーションを書いています、そして今、私はオブジェクトの年齢に応じて色を変更しようとしています(System.currentTimeMillis()
経由で保存される)赤く表示されます。誰かアルゴリズムを知っていますか?年齢によってJavaの色
答えて
あなた最古オブジェクトが青になりたいと仮定すると、あなたの最新オブジェクトは赤であることを、あなたはすべてのオブジェクトを知っている「年齢」
// mesure the difference in age of the newest and oldest objects
double agediff = newest.timestamp - oldest.timestamp;
// for any given object :
// 1. color ratio from 0.0=old to 1.0=new
double ratio = (someObject.timestamp - oldest.timestamp)/ageDiff;
// 2. get red and blue values
int red = 255 - (255 * ratio);
int blue = 255 * ratio;
// 3. construct Color
Color objectColor = new Color(red, 0, blue);
あなたの場合(のはtimestamp
それを呼びましょう)あなたが表示したい陰影の数を段階的な大きさに応じて単純に丸めます。たとえば、次のように
// the maximum number of shades between blue and red
int step = 4; // the value cannot be 1 (otherwise use a Color constant!)
double stepScale = 256/(step - 1);
double halfStepScale = stepScale/2;
ratio = Math.ceil((int) ((ratio * 256 + halfStepScale)/stepScale) * stepScale)/256d;
または、代わりに、あなたは(たとえば、60 seconds
、または60000 millis
のために)、単純にこの値を持つoldest.timestamp
を交換して含めるようにアルゴリズムを変更する最大TTL値にnewestから拡張したい場合オーバーフローチェック:
// our "oldest" timestamp is now pre-defined:
long oldestTs = newest.timestamp - ttlTimestamp; // ttlTimestamp = 60000;
// mesure the difference in age of the newest and the TTL (ex: 60000)
double agediff = newest.timestamp - oldestTs;
// for any given object :
// 1. color ratio from 0.0=old to 1.0=new
double ratio = (someObject.timestamp - oldestTs)/ageDiff;
if (ratio < 0.0) ratio = 0.0; // prevent overflow
// etc.
** 編集 **
あなたは赤/青以外のグラデーションをしたい場合は、持つことができます
を// green=new, yellow=old
new Color(1f - (float) ratio, 1f, 0f);
// yellow=new, green=old
new Color((float) ratio, 1f, 0f);
// green=new, red=old
new Color(1f - (float) ratio, (float) ratio, 0f);
// etc.
大変ありがとうございました!私はあなたの最初の抜粋を使用し、今私はちょっと質問が残っています:ハードコードされたカラー値の代わりに2つのカラーオブジェクトをどのように使用できるのですか? – jhbruhn
どういう意味ですか?私が理解しているところでは、「ハードコードされたカラー値」は 'Color.Blue'、' Color.Red'などのようなもので、 'new Color(red、green、blue)'で独自の 'Color'インスタンスを作成できます。各値は「0-255」の範囲内にある。あなたはもっと具体的になりますか? –
私はこれを置き換えたい:int red = 255 - (255 * ratio); int blue = 255 * ratio; 2つのColorオブジェクトがあります。だから私はf。青色/赤色のグラデーションは生成しませんが、緑色/黄色のグラデーションは生成しません。 – jhbruhn
カラーの色=年齢> 5280? Color.RED:年齢> 1000? Color.BLACK:年齢> 30? Color.YouGetTheIdea
私はあなたのコードにそのような三項演算子を入れ子にすることは決してないと教えてください... – Jeffrey
私はかもしれない...それはコンパクトで明確です。しかし、主に私は教授のための教授の例を掲示します。創始者は、自分の状況に最も適したものを選ぶ。新しい読者の中には、このオプションについて知らない人がいるかもしれません。しかし、通常は、nn = xx?yy:zzを使用します。あなたがすでに望んでいたように。 – Java42
私は通常、単純なバリデーションを行うときには三項演算子が好きですが、これは乱用されていると思います。特に 'if .. else'ブロックがこの場合効率的であり、より読みやすいソースを生成するためです。コードソースが小さくても、コンパイルされたコードが高速になるわけではありません。 –
あなたはすなわちいずれかのミリ秒、時間、またはおそらくカスタム・メジャーでは上記に基づいて、各オブジェクトの年齢に基づいて対策を持っている可能性が何も< 1時間が1であるなど
与えることあなたの尺度あなたは現在の限界を9分と最大に見つけるためにオブジェクトを反復することができます)、または測定値を計算する間にそれを実行することもできます:最小時間よりも短い時間が発生すると、新しい分などを保存します。
今、最後に色を適用することです。私たちのオブジェクトの範囲は10msから1000msです。たとえば、10〜100,100〜500,500〜1,000の3つの領域に分割し、それに基づいて色を適用することができます。
- 1. 年齢によってフィルタリングlaravel
- 2. 年齢から年齢層に加入
- 3. 年齢間のjQueryフィルタリングの年齢
- 4. 年齢推定用年齢データベース
- 5. 年齢
- 6. アイテムの年齢としてのツイーンの色は?
- 7. カレンダーオブジェクトを使用してJavaで年と年の年齢を計算します
- 8. twig、symfony2を使って月齢を現在の年齢にする方法は?
- 9. PHPレンダリング年齢
- 10. 年齢計算
- 11. 計算年齢
- 12. 年齢検査
- 13. パワークエリーの日付フィールドから年齢および年齢バケットを計算する
- 14. Moquiフレームワークから「年齢」の間の「年齢」のコールレットサービス:
- 15. Androidデバイスの年齢
- 16. 年齢のOLAPディメンション
- 17. Neo4Jグループ年齢によるCypherクエリ
- 18. 年齢によって従業員の最高給与を表示するクエリ
- 19. 年齢計算 - タイムスタンプフィールド
- 20. は、年齢、出生
- 21. codeigniter年齢形式
- 22. Prometheusメトリック値年齢
- 23. 名前、年齢と
- 24. Podio年齢計算
- 25. PHP年齢確認
- 26. (年齢順)アライリストに追加
- 27. 2つの年齢フィールドに基づいたMySQLの年齢範囲クエリ
- 28. 年齢の形式 - 年と月
- 29. 年の順序に基づいて年齢を代入する
- 30. うるう年を考慮してJavaで年齢を計算する
このうちどの部分に問題がありますか? –
実際にすべてのものが...:D私は私の計算アルゴリズムからどのように私が始めなければならないのか分かりません... – jhbruhn
チェーンをつけて、角かっこで色を選ぶことができますか? > 1時間、> 3時間、> 5280時間など? – Java42