এক মিনিট \ সর্বোচ্চ সেট থেকে অন্য ন্যূনতম \ সর্বাধিক সেটে কীভাবে একটি নম্বর রূপান্তর করবেন? [বন্ধ]


19

আমি ভূখণ্ড প্রজন্ম করছি এবং আমার একটি পার্লিন লাইব্রেরি রয়েছে যা আমাকে -1 এবং +1 এর মধ্যে এলোমেলো সংখ্যা দিচ্ছে। আমি এটি 0-255 স্কেলে রূপান্তর করতে চাই। এটি করার সঠিক উপায় কী?

উত্তর:


23

বেস সূত্রটি হ'ল:

Result := ((Input - InputLow) / (InputHigh - InputLow))
          * (OutputHigh - OutputLow) + OutputLow;

আপনার ক্ষেত্রে:

ফলাফল: = (( ইনপুট - -1 ) / ( 1 - -1 ) * ( 255 - 0 ) + 0 ;

এখান থেকে আপনি রূপান্তরটি অনুকূল করতে পারেন যদি আপনার সহগগুলি স্থির থাকে তবে সংকলক সম্ভবত এটি নিজে থেকে এটিও করবে by

ফলাফল: = (( ইনপুট - -১ ) / 2 ) * 255 + 0 ;

ফলাফল: = ইনপুট * 127.5 + 127.5 ;


2
এই উত্তরটি আমার প্রোগ্রামার মস্তিষ্কে সর্বাধিক জ্ঞান অর্জন করেছে। :) তাদের দুর্দান্ত উত্তরের জন্য প্রত্যেককে একটি "ধন্যবাদ"।
থ্রাকা

10

পরিসর -1থেকে 1একটি মোট পরিসর 2। সুতরাং আপনার এটি পেতে যথাযথভাবে স্কেল করা দরকার 255। এটার মতো কিছু:

(randomPerlin + 1.0) * 127.5

সুতরাং আপনি প্রথমে যোগ করুন 1, 0..2তারপরে 127.5একটি রেঞ্জ পেতে তার সাথে গুণিত করুন0..255


3

স্কেলিং এবং পক্ষপাতের শক্তির মাধ্যমে।

আপনার মান থেকে, আপনার ব্যাপ্তির সর্বনিম্ন মান বিয়োগ করুন। এটি আপনাকে [0..2] সীমাতে একটি মান দেয়।

উত্সের পরিসীমা প্রস্থ অনুসারে ভাগ করুন, আপনাকে পরিসরে একটি মান প্রদান করে [0..1]।

লক্ষ্য সীমাটির প্রস্থের মাধ্যমে এটির গুণন করুন, আপনাকে পরিসরে একটি মান প্রদান করে [0..255]।

লক্ষ্য পরিসরে একটি মান পেতে লক্ষ্য সীমার বেস যুক্ত করুন, যা এই ক্ষেত্রে আগের পদক্ষেপের মতো।

সংক্ষেপে:

            (v - (-1.0)) 
v' = 0 + ---------------- * (255 - 0)
          (1.0 - (-1.0))

3
oldRange = oldMax - oldMin
newRange = newMax - newMin

newValue = ((oldValue - oldMin) * newRange / oldRange) + newMin

আশাকরি এটা সাহায্য করবে.


2

ইনপুট পরিসীমাটি অনুবাদ করুন যাতে আমরা 1 যোগ করে মিনিটটি শূন্যের সাথে পাই (মিনিটের ইনপুটটির নেতিবাচক মান) -1 .. 1 -> 0 .. 2

আউটপুট পরিসীমা শূন্য দিয়ে শুরু হওয়ার সাথে সাথে এর জন্য কিছু করবেন না।

নতুন ইনপুট পরিসরটি স্কেল করুন যাতে এটি আউটপুট পরিসরের সাথে খাপ খায়, এগুলি এখন উভয়ই শূন্য থেকে শুরু হওয়ায় এটি সহজ: 255/2 0..2 * 2/255 -> 0..255 দিয়ে মানটি গুণান

সম্পন্ন!

উদাহরণ:

0.5 যাবে: (0.5 + 1) * 127.5 = 191.25 -0.5 যাবে: (-0.5 + 1) * 127.5 = 63.75


2

দেয় বলে xআসল ইনপুটের এবং yআশা করা হচ্ছে আউটপুট। আমাদের কমপক্ষে দুটি পয়েন্ট রয়েছে (x, y) (-1, 0) (1, 255)

যেহেতু আমরা একটি লিনিয়ার অন্তরঙ্গকরণ করতে চাই আমরা ফর্মের সমীকরণটি দেখতে পারি y = m*x + c

উপরোক্ত দুটি পয়েন্টের সাহায্যে আমরা সমাধান করতে পারি mএবং c এটি শেষ হয়ে গেলে আপনি রূপান্তর সমীকরণ পান।

নোট করুন যে এই পদ্ধতিটি অন্যান্য ধরণের সমীকরণের জন্যও কাজ করে। উদাহরণস্বরূপ, আপনি যদি কোনও ক্ষতিকারক বা চতুর্ভুজ ইন্টারপোলেশন চান।


আমাদের ক্ষেত্রে, সাধারণ অর্থ রৈখিক ক্ষেপক যে আপনি এই মত একটি মিশ্রণ ফ্যাক্টর সঙ্গে দুই পরিমাণে মধ্যে সুসংগত মিশ্রিত করা হতে থাকে: v = (1-a)*x + (a)*y। আমি দেখতে পাচ্ছি না যে এই উত্তরটির জিজ্ঞাসা করা প্রশ্নের সাথে তার কতটা প্রাসঙ্গিকতা রয়েছে কারণ তিনি যা চান তার সবগুলিই একটি পরিসীমা ম্যাপিং।
লার্স ভিক্লুন্ড

জিনিসটি একটি প্লেনের দুটি পয়েন্ট যা স্বতন্ত্রভাবে একটি লাইনের সংজ্ঞা দেয়। আমরা রেঞ্জ ম্যাপিংকে সরলরেখার মতো আচরণ করতে পারি। এবং আমরা এই লাইনে দুটি পয়েন্ট জানি। এটি সমাধান করা লাইনের সমীকরণ দেবে। লিনিয়ার অন্তরঙ্গকরণ এখানে সঠিক শব্দ নয়, তবে আমি এই লাইনের দুটি পয়েন্টের মধ্যে অভ্যন্তরীণ পয়েন্টগুলির সেট বোঝাতে চেয়েছিলাম।
অঙ্কুশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.