私はいくつかのグラフィックスを表示する小さなアプリケーションを書いています、そして今、私はオブジェクトの年齢に応じて色を変更しようとしています(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. アイテムの年齢としてのツイーンの色は?
- 2. 計算年齢
- 3. 年齢検査
- 4. 年齢計算
- 5. 年齢のOLAPディメンション
- 6. Androidデバイスの年齢
- 7. Moquiフレームワークから「年齢」の間の「年齢」のコールレットサービス:
- 8. codeigniter年齢形式
- 9. 年齢計算 - タイムスタンプフィールド
- 10. 年齢によって従業員の最高給与を表示するクエリ
- 11. 2つの年齢フィールドに基づいたMySQLの年齢範囲クエリ
- 12. C#Webページの年齢?
- 13. HTML - キャッシュコントロールの最大年齢
- 14. 年齢グループ間のSQL
- 15. 年齢制約の検索
- 16. 年齢グループ(クラス関数が)私は、次の式で年齢グループを作った私のQlikViewのアプリで
- 17. PHP年齢確認ドロップダウン
- 18. 年齢確認に関するクッキー法
- 19. opencvでの年齢推定へのアプローチ
- 20. MySQLの更新年齢の列
- 21. フィールドとして名前、年齢とともにどのようにXML
- 22. Foundation-datepicker.jsの年齢を計算する
- 23. Gravity FFormsの年齢を計算する
- 24. ヒロクのスプロケット最大年齢ヘッダー
- 25. ストレッチウェブページの高さは、今の年齢のためにしようとしてブラウザ
- 26. 年齢列を毎年変更し、性別のドロップダウンメニュー
- 27. 見つけるDateOFBirth年齢から
- 28. Mongo集約フレームワーク:年齢別グループユーザー
- 29. Hibernate:年齢に基づいてオブジェクトを注文する
- 30. 年、月、日、時、分、秒で年齢を計算する
このうちどの部分に問題がありますか? –
実際にすべてのものが...:D私は私の計算アルゴリズムからどのように私が始めなければならないのか分かりません... – jhbruhn
チェーンをつけて、角かっこで色を選ぶことができますか? > 1時間、> 3時間、> 5280時間など? – Java42