আমি কীভাবে দুটি পৃথক 2 ডি সমন্বিত সিস্টেমের মধ্যে রূপান্তর করব?


10

আমি একটি স্থানাঙ্ক সিস্টেম থেকে অন্য স্থানাঙ্ককে রূপান্তর করার চেষ্টা করছি, যাতে আমি এটি একটি চিত্রের উপর আঁকতে পারি।

মূলত গন্তব্য স্থানাঙ্ক সিস্টেমটি নিম্নরূপ:

X range: 0 to 1066
Y range: 0 to 1600

(1066 x 1600 আকারের সাথে আমি কেবল একটি মানক চিত্রই আঁকছি)

আমি যে অবস্থানটি চিত্রটিতে আঁকতে চেষ্টা করছি সেটি হুবহু একই আকারের, তবে স্থানাঙ্ক সিস্টেমটি ভিন্ন। স্থানাঙ্কগুলির সমস্ত স্প্যান 1066x1600।

তবে একটি সমন্বিত উদাহরণ হ'ল:

(111.33f, 1408.41f)
(-212.87f, 1225.16f)

এই সমন্বিত সিস্টেমের ব্যাপ্তিটি হ'ল:

X range: -533.333 to 533.333
Y range: 533.333 to 2133.333

আমার মনে হচ্ছে এটি খুব সাধারণ গণিত, তবে কোনও কারণে আমি তা পাচ্ছি না।

কীভাবে আমি প্রথম স্থানাঙ্ক ব্যবস্থায় সরবরাহিত স্থানাঙ্কগুলিকে রূপান্তর করতে পারি?


3
দুটি সমন্বয় সিস্টেমে একই বেস ভেক্টর থাকলে আপনি কেবল একটি স্কেলিং ফ্যাক্টর ব্যবহার করতে পারেন। তাদের যদি একই বেস ভেক্টর না থাকে তবে একটি বেস পরিবর্তন প্রয়োজন।
থ্যালাডোর

উত্তর:


7

আপনি প্রথম মানটি স্বাভাবিক করতে পারেন, এটি আপনাকে [0,1] ব্যাপ্তির মধ্যে একটি মান দেয়। আপনি এটিকে X শতাংশ হিসাবে ভাবাতে পারেন, ন্যূনতম এবং সর্বাধিক মানগুলির মধ্যে যে মান মানচিত্রটি percentage তারপরে আপনি গন্তব্য সিস্টেমের মাধ্যমে X শতাংশের মান কী হবে তা দেখে আপনার গন্তব্য স্থানাঙ্ক সিস্টেমে সেই শতাংশটি কোথায় তা খুঁজে পেতে পারেন। আমি জাভা কোডটি উদাহরণস্বরূপ ভাষা হিসাবে ব্যবহার করব, আমি নিশ্চিত যে ধারণাটি যে কোনও ভাষায় অনুবাদ করার পক্ষে যথেষ্ট পরিষ্কার।

তাই স্বাভাবিক করুন:

public static float normalize(float value, float min, float max) {
    return Math.abs((value - min) / (max - min));
}

আপনার উদাহরণটি ব্যবহার করে আপনি ইনপুট চাইবেন:

xPercent = normalize(x,0,1066);

তারপরে এটি গন্তব্য সিস্টেমে কোথায় থাকে তা সন্ধান করুন। যেমন কিছু সঙ্গে

destX = xPercent*(Math.abs(max-min)) + min;

বা আপনার মান ব্যবহার করতে:

destX = xPercent*(Math.abs(533.33--533.33)) + -533.33;

সুতরাং উদাহরণস্বরূপ 1000 এর x মান সহ আপনি মানচিত্রটি নিজের গন্তব্য স্থানাঙ্কিত সিস্টেমে আনতে পারেন 467.29

বিকল্পভাবে , যদি স্থানাঙ্ক সিস্টেমগুলি সর্বদা একই থাকে তবে আপনি তাদের মধ্যে অনুপাতটি প্রাক-গণনা করতে পারেন।

তাই:

xRatio = (Math.abs(srcMax-srcMin))/(Math.abs(destMax-destMin));

destX = x*xRatio+destMin;

জাভা (সি #) কেন? তিনি জাভা কোড জিজ্ঞাসা করেননি :)
ক্রাভেমির

6
এটি একটি উদাহরণ দিতে হবে। এটি যেমন হয় তেমন ব্যবহার করার দরকার নেই, এবং ধারণাটি যথেষ্ট পরিষ্কার।
মাইকেলহাউস

তবে আমি যদি এটি করি: গন্তব্য = এক্স পার্সেন্ট * (ম্যাথ.অবস (533.33--533.33)) + -533.33; আমি সর্বদা একটি নেতিবাচক মান পাই, এবং ফলাফল সমন্বয় ব্যবস্থাটি কেবল 0-1066 থেকে হয়, আমি কি সমস্ত স্থানাঙ্ককে চারপাশে স্যুইচ করব?
গিসু

এগুলির চারপাশে স্যুইচ করা হয়েছে এবং আমি এখনও অন্য পোস্টের মতো ডাম্প.টানারিস 4.com/sota.png পাচ্ছি , সম্ভবত আমার পুরোপুরি অন্য কোনও সমস্যা হচ্ছে (সি # এবং অঙ্কনের সাথে সম্পর্কিত)। ধন্যবাদ বন্ধুরা!
গিসু

বুঝতে পেরেছি, কোনও কারণে আমাকে xPercent = 1.0f - xPercent
Geesu

4

এটি সহজ গণিত:

res = ( src - src_min ) / ( src_max - src_min ) * ( res_max - res_min ) + res_min

src - উত্স সমন্বয় সিস্টেম

পুনরায় - ফলাফল সমন্বয় ব্যবস্থা

সম্পাদনা - গণিতের ব্যাখ্যা

( src - src_min ) / ( src_max - src_min )উত্স স্থানাঙ্ক ব্যবস্থার সমান দৈর্ঘ্যের সাথে শূন্য থেকে শুরু হওয়া স্থানাংক ব্যবস্থায় এটি অনুবাদ করে (0.0, src_max - src_min )। তারপরে এটি সিস্টেমকে সমন্বয় করার জন্য স্কেল করে (0.0, 1.0)

* ( res_max - res_min ) ফলাফল সমন্বয় ব্যবস্থার দৈর্ঘ্যের সাথে শূন্য থেকে শুরু হওয়া সিস্টেমের সমন্বয় করতে এই স্কেলগুলি মান value (0.0, dst_max - dst_min)

+ res_min ফলাফলের স্থানাঙ্ক ব্যবস্থায় মান অনুবাদ করে (dst_min, dst_max)


আমি এটিও ভেবেছিলাম, তবে এটি সঠিকভাবে প্রদর্শিত হচ্ছে না: dump.tanaris4.com/sota.png চূড়ান্ত স্থানাঙ্কটি যেখানে সাদা বৃত্তটি নীচে রয়েছে সেখানে আঘাত করা উচিত
গিসু

1
এটি তাদের গণিতকে মোটেও ব্যাখ্যা করে না, কেন নয়? :)
মাইকেলহাউস

@ বাইট ৫6 আমার পক্ষে এমন কিছু বোঝার জন্য যথেষ্ট সূত্র, বিশেষত যদি এটি কেবল গাণিতিক ক্রিয়াকলাপ ব্যবহার করে তবে আমি এর প্রয়োজন এমন লোকদের জন্য ব্যাখ্যা যুক্ত করেছি :)
ক্রাভেমির

1
@ গিসু তাহলে আপনার সম্ভবত অন্য কোনও খারাপ কাজ করা হচ্ছে (ম্যাট্রিকগুলি উপস্থাপন করছেন?)।
ক্রাভেমির

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

3

2 ডি স্থানাঙ্কিত ট্রান্সফর্মেশনের জন্য মূল সমীকরণ (বীজগণিতে, কোনও ঘূর্ণন জড়িত ছাড়াই) হ'ল:

TargetCoordinate = TranslateFactor + ScalingFactor*SourceCoordinate

টার্গেটকর্ডিনেট (টি 1, টি 2) এ দুটি পয়েন্ট দেওয়া হয়েছে যা সোর্সকোর্ডিনেট (এস 1, এস 2) এর দুটি পয়েন্টের সাথে মিলে যায় TranslateFactorএবং সমাধানের মাধ্যমে ScalingFactorদেওয়া হয়:

T1 = TranslateFactor + ScalingFactor*S1
T2 = TranslateFactor + ScalingFactor*S2

ফলাফল:

TranslateFactor = (T2*S1 - T1*S2) / (S1 - S2)
ScalingFactor   = (T2 - T1) / (S2 - S1)

আপনার ক্ষেত্রে, এক্স স্থানাঙ্কের জন্য

S1 = 0    -> T1 = -533.333
S2 = 1066 -> T2 = 53.333

এবং এগুলো,

TranslateFactor = -533.333
ScalingFactor   = 1.000625
=> TargetCoordinate = (-533.333) + (1.000625)*SourceCoordinate

y একই পদ্ধতি অনুসরণ করুন সমন্বয়


এস 1 এবং এস 2 এর একই x / y সমন্বয় থাকতে পারে না যা শূন্য দ্বারা একটি বিভাজনের দিকে পরিচালিত করে।
zwcloud

0

কয়েকটি অনুমান করা:

  • আপনি (শেষ পর্যন্ত) ম্যাট্রিক্স প্রতিবন্ধীকরণের সুবিধার্থে এবং সুবিধার জন্য আগ্রহী; এবং
  • আপনি সমজাতীয় স্থানাঙ্কের সাথে পরিচিত।

তারপরে প্রশ্নটি স্থানান্তরিত: আমার ভিত্তি পরিবর্তনের জন্য আধিপত্য ট্রান্সফর্মেশন ম্যাট্রিক্স কী?

এর উত্তর দিতে আমাদের প্রথমে তিনটি সহায়ক অনুসন্ধানের উত্তরগুলি দরকার:

  1. আমার উত্স কোথায় গেছে?
  2. আমার এক্স-অক্ষের কী হল? (এম 11, এম 12) বিন্দুটির স্থানাঙ্ক হয়ে উঠুক
  3. আমার ওয়াই-অক্ষের কী হল?

এই থ্রাই করা প্রশ্নের উত্তরগুলি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করুন:

  1. (M31, M32) হ'ল মূল স্থানাঙ্ক ব্যবস্থার অধীনে নতুন উত্সের স্থানাঙ্ক।
  2. (M11, M12) হ'ল মূল সমন্বয় ব্যবস্থায় নতুন ইউনিট এক্স-ভেক্টরের স্থানাঙ্ক।
  3. (M21, M22) হ'ল মূল সমন্বয় ব্যবস্থায় নতুন ইউনিট ওয়াই-ভেক্টরের স্থানাঙ্ক।

তারপরে সমজাতীয় রূপান্তর ম্যাট্রিক্স হ'ল:

( M11, M12,  0 )
( M21, M22,  0 )
( M31, M32,  1 )

আমার কনভেনশনটি এখানে পয়েন্টগুলি সারি ভেক্টর দ্বারা প্রতিনিধিত্ব করা হয় যা সাধারণ কম্পিউটার গ্রাফিক্স কনভেনশন; গণিতবিদ এবং পদার্থবিদরা প্রায়শই বিপরীত শব্দটি ব্যবহার করেন।


একটি সমন্বিত সিস্টেমটি এ জাতীয় ম্যাট্রিক্স দ্বারা বর্ণিত হতে পারে: এম 11 = এক্সএক্সিস.এক্স, এম 12 = এক্স্যাক্সিস.ওয়াই, এম 21 = ইয়্যাক্সিস.এক্স, এম 22 = ইয়্যাক্সিস.ওয়াই, এম 31 = অরিজিন.এক্স, এম 32 = আদি। ওয়াই। একটি সমন্বিত সিস্টেম ম্যাট্রিক্স এ এবং একটি সমন্বিত সিস্টেম ম্যাট্রিক্স বি দেওয়া, পি * এ * বিপরীতমুখী (বি), যেখানে পি এ এর ​​স্থানাঙ্ক হিসাবে বিন্দুর প্রতিনিধিত্ব করে, বি তে স্থানাঙ্ক হিসাবে বিন্দুর প্রতিনিধিত্ব লাভ করে
জিম বাল্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.