3

したがって、ライン上で動作するさまざまな関数が必要になる場合があります。

inline float yIntercept(const vec2& ptA, const vec2& ptB, float x);
inline float xIntercept(const vec2& ptA, const vec2& ptB, float y);
inline bool lineIntersection(const vec2& ptA0, const vec2& ptB0, const vec2& ptA1, const vec2& ptB1);

関数は、線を表す線ごとに 2 点を取ります。

または、これら 2 つのポイントとさまざまな便利な線関連メソッドを持つ線クラスを作成できます。

struct Line {
    ... stuff

    inline float xIntercept(float y);
    inline float yIntercept(float x);

    inline bool lineIntersection(const Line& other);

    vec2 m_point[2];
};

私が考えていたことの 1 つは、2 つのポイントが与えられたときにこれらの関数のいずれかを呼び出す必要があるたびに、この線クラスのインスタンスを作成するパフォーマンスです。

ポリゴンを表すポイント リストを操作していて、実際には線オブジェクトがインスタンス化されていない可能性があります。

いつでも私はどちらかを呼び出すことができます

yIntercept(somePointA, somePointB, 3.0f);

または

Line(somePointA, somePointB).yIntercept(3.0f);  //I think this would compile

私は、C スタイルの関数ではなく、これらの種類のクラスを持つという考えが好きですが、ポイントを関数に直接渡すのではなく、このようなクラスのインスタンスを作成することでパフォーマンスが低下するのではないかと考えていました。たぶん、コンパイラはいくつかの最適化を行いますか?

4

2 に答える 2

1

私が考えていたことの 1 つは、2 つのポイントが与えられたときに、これらの関数のいずれかを呼び出す必要があるたびに、この線クラスのインスタンスを作成するパフォーマンスです。

それが本当にアプリケーションの問題である場合は、おそらく「やり方が間違っている」でしょう。つまり、正しく行えば、このオブジェクトを作成するコードは非常に軽量でなければならないということです。それでも、本当にこれらのオブジェクトをたくさん作成する必要がありますか? 線を構成する「こと」を実行して、時間の経過とともに存続しないようにして、構造体 Line を何らかの方法でオーバーライドオブジェクトの一部にすることができます。

たとえば、ポリゴンでは、ポイントリストから Line オブジェクトを作成し、それらを保持できます。

また、一般的で適切に機能するコードベースを作成することから始め、すべてが機能しているときに最適化します。何かを書き直す必要がある場合は、そうしてください。インターフェースを十分に一般的なものにして、他のコードをあまり書き直す必要がないことを願っています。

そして、パフォーマンスを最適化するときはいつでも、必ず測定し、もう一度測定し、それを変更するために何をしたかを書き留めてください. スプレッドシートに「X を変更してみました」、「関数 A で巧妙なトリックを使用しました」、および結果が含まれる数百行が時々ありました。少なくとも、結果がどうなるかはわかります。「コンパイラがこれを行うと思います」を使用するには、特定のコンパイラで多くの経験が必要です。

于 2013-01-26T18:37:22.557 に答える
1

他の要因に基づいてソリューションを選択してください。おそらく、関与する労力または読みやすさ。

このアプローチを取る理由は、次の 2 つのシナリオのいずれかを選択しているためです。

  1. オブジェクトを作成する余分な作業が発生しLineます。
  2. 関数にさらに多くのパラメーターを渡すという余分な作業が発生します。

コンパイラは、1. または 2. のいずれかで最適化を実行できます。か否か。そして、それは役立つかもしれません。か否か。

この記事を参照して、あなたのような最適化の決定について詳しく学んでください。作者はどうでもいい。

http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of-micro-optimization-theater.html

于 2013-01-26T18:57:36.960 に答える