একটি 2 ডি ভেক্টরের ক্রস পণ্য গণনা করা হচ্ছে


87

উইকিপিডিয়া থেকে:

ক্রস প্রোডাক্টটি ত্রি-মাত্রিক ইউক্লিডিয়ান স্পেসে দুটি ভেক্টরগুলির উপর একটি বাইনারি অপারেশন যা অন্য ভেক্টরের ফলস্বরূপ যা দুটি ইনপুট ভেক্টর সমেত বিমানের লম্ব হয়।

প্রদত্ত সংজ্ঞাটি কেবলমাত্র তিন ( বা সাত, এক এবং শূন্য ) মাত্রায় সংজ্ঞায়িত করা হয়েছে , কেউ কীভাবে দুটি 2 ডি ভেক্টরের ক্রস প্রোডাক্ট গণনা করে?

আমি দুটি বাস্তবায়ন দেখেছি। একটি নতুন ভেক্টর ফেরত দেয় (তবে কেবলমাত্র একটি একক ভেক্টর গ্রহণ করে), অন্যটি একটি স্কেলার ফেরত দেয় (তবে দুটি ভেক্টরের মধ্যে একটি গণনা)।

বাস্তবায়ন 1 (একটি স্কেলার প্রদান করে):

float CrossProduct(const Vector2D & v1, const Vector2D & v2) const
{
    return (v1.X*v2.Y) - (v1.Y*v2.X);
}

বাস্তবায়ন 2 (একটি ভেক্টরকে রিটার্ন দেয়):

Vector2D CrossProduct(const Vector2D & v) const
{
    return Vector2D(v.Y, -v.X);
}

বিভিন্ন বাস্তবায়ন কেন? আমি স্ক্যালার বাস্তবায়ন কিসের জন্য ব্যবহার করব? আমি ভেক্টর বাস্তবায়ন কিসের জন্য ব্যবহার করব?

আমি জিজ্ঞাসার কারণটি হ'ল আমি নিজে একটি ভেক্টর 2 ডি ক্লাস লিখছি এবং কোন পদ্ধতিটি ব্যবহার করতে হবে তা জানি না।


10
বাস্তবায়ন 2 ভুল। ক্রস পণ্য গঠনের জন্য আপনার দুটি ভেক্টর দরকার।
বোবোবোবো

7
বাস্তবায়ন 2 প্রদত্ত ভেক্টর v-- 90 ডিগ্রি দ্বারা ঘোরে । সাবস্টিটিউ -90 ইন x' = x cos θ - y sin θএবং y' = x sin θ + y cos θ। এই বাস্তবায়ন আরেকটি প্রকরণ হবে থেকে return Vector2D(-v.Y, v.X);যা ঘোরান হয় বনাম +90 ডিগ্রী।
কিংবদন্তি

4
@ কিংবদন্তি 2 কে: এটি লক্ষণীয় যে বাস্তবায়ন 2 ক্রস পণ্যটি মূল্যায়নের জন্য নির্ধারককে ব্যবহার করার একটি এক্সটেনশন : কেবল শেষ সারি এবং কলামটি সরিয়ে ফেলুন। এই জাতীয় এক্সটেনশনের সর্বদা মাত্রাগুলির N-1জন্য অপারেশন থাকে N
টিম Čas

4
বাস্তবায়ন 1 ক্রস পণ্যের দৈর্ঘ্যের গণনা করে ।
মতিন উলহাক

@ ম্যাটেন উলহাক এর ধরণের, এটি " স্বাক্ষরিত মাত্রা"
মরিটজ মাহরিনগার

উত্তর:


101

বাস্তবায়ন 1 ভেক্টরের পরিমাণ বাড়িয়ে দেয় যা ইনপুট ভেক্টরগুলির নিয়মিত 3 ডি ক্রস প্রোডাক্ট থেকে আসে এবং তাদের জেড মানগুলি 0 হিসাবে স্পষ্টভাবে গ্রহণ করে (অর্থাত 3 ডি স্পেসে 2 ডি স্পেসকে প্লেন হিসাবে চিকিত্সা করে)। 3 ডি ক্রস পণ্যটি সেই বিমানে লম্ব হবে এবং সুতরাং 0 টি এক্স ও ওয়াই উপাদান থাকবে (এইভাবে স্কেলারটি 3 ডি ক্রস প্রোডাক্ট ভেক্টরের জেড ভ্যালু হিসাবে ফিরে আসে)।

নোট করুন যে 3 ডি ক্রস পণ্য থেকে প্রাপ্ত ভেক্টরের পরিমাণটি দুটি ভেক্টরগুলির মধ্যে সমান্তরাল ক্ষেত্রের সমান , যা ইমপ্লিমেন্টেশন 1 কে অন্য একটি উদ্দেশ্য দেয়। তদুপরি, এই অঞ্চলটি স্বাক্ষরিত এবং এটি V1 থেকে V2 এ ঘড়ির কাঁটার দিকে বা ঘড়ির কাঁটার দিকে চলে কিনা তা নির্ধারণ করতে ব্যবহার করা যেতে পারে। এটিও লক্ষ করা উচিত যে বাস্তবায়ন 1 হ'ল এই দুটি ভেক্টর থেকে নির্মিত 2x2 ম্যাট্রিক্সের নির্ধারক।

বাস্তবায়ন 2 একই ইনপুট ভেক্টরটিতে এখনও একই 2D সমতলতে একটি ভেক্টর লম্বকে প্রত্যাবর্তন করে। শাস্ত্রীয় অর্থে ক্রস পণ্য নয় তবে "আমাকে একটি লম্ব ভেক্টর দিন" অর্থে সঙ্গতিপূর্ণ।

নোট করুন যে 3 ডি ইউক্লিডিয়ান স্পেস ক্রস প্রোডাক্ট অপারেশনের অধীনে বন্ধ রয়েছে - অর্থাত, দুটি থ্রিডি ভেক্টরের ক্রস প্রোডাক্ট অন্য 3 ডি ভেক্টরকে ফিরিয়ে দেয়। উপরের 2D বাস্তবায়ন উভয়ই একরকম বা অন্য কোনওভাবে তার সাথে বেমানান।

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


7
আসলে, বাস্তবায়ন 2 হ'ল ভি এর ক্রস প্রোডাক্ট এবং ইউনিট ভেক্টরটি জেড-দিক নির্দেশ করে।
ম্যাটিস্টেস্ট

@ ম্যাটটিস্ট: সত্য। 2D 'পের্প' অপারেশনটি ঠিক 3D তে বর্ণিত হয়েছে।
ড্রিউ হল

@ ম্যাটটিস্ট: বাস্তবায়ন 2 ক্রস পণ্যটি গণনা করার জন্য একটি নির্ধারককে ব্যবহার করার এক্সটেনশন হিসাবে ভাবা যেতে পারে --- কেবল শেষ সারি এবং কলামটি সরিয়ে ফেলুন। এটি লক্ষ করা উচিত যে বাস্তবায়ন 1 এর সমতুল্য: DotProduct(a, CrossProduct(b))যা একটি "লম্ব ডট পণ্য" (যা বাস্তবায়ন 1 এছাড়াও [এবং সম্ভবত আরও সঠিকভাবে] হিসাবে পরিচিত!) ধারণার সাথে সামঞ্জস্যপূর্ণ!
টিম Čas

আপনার প্রথম অনুচ্ছেদে, মাত্রাটি কী ফিরে এসেছে তার পরম মান। এটি জেড উপাদান হিসাবে একেবারে একই জিনিস নয়। আপনি যেমন ২ য় অনুচ্ছেদে দেখিয়েছেন, আপনি ভ্যাম্পায়ারদের পিছনে ফেলে দিতে ক্রসের চিহ্নটি ব্যবহার করতে পারেন ... ভুল, আমি বোঝাতে চাইছি যখন কোনও ভেক্টর বনাম কোনও বহুভুজের রূপরেখায় প্রবেশ করছে তখন উদাহরণস্বরূপ।
পিটার কর্ডেস

68

সংক্ষেপে: এটি একটি গাণিতিক হ্যাকের জন্য একটি শর্টহ্যান্ড স্বরলিপি।

দীর্ঘ ব্যাখ্যা:

আপনি 2 ডি স্পেসে ভেক্টরগুলির সাথে ক্রস পণ্য করতে পারবেন না। অপারেশন সেখানে সংজ্ঞায়িত করা হয় না।

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

যদি আপনি সেভাবে ভেক্টরগুলি প্রসারিত করেন এবং এই জাতীয় বর্ধিত ভেক্টর জুটির ক্রস প্রোডাক্ট গণনা করেন তবে আপনি লক্ষ্য করবেন যে কেবলমাত্র z- উপাদানটির একটি অর্থপূর্ণ মান রয়েছে: x এবং y সর্বদা শূন্য হবে।

এ কারণেই ফলাফলের z-উপাদানগুলি সহজেই স্কেলার হিসাবে ফিরে আসে। এই স্কেলারটি উদাহরণস্বরূপ 2 ডি স্পেসে তিনটি পয়েন্টের বাতাসের সন্ধান করতে ব্যবহৃত হতে পারে।

খাঁটি গাণিতিক দৃষ্টিকোণ থেকে 2 ডি স্পেসে ক্রস পণ্যটির অস্তিত্ব নেই, স্কেলারের সংস্করণ হ্যাক এবং একটি 2 ডি ক্রস পণ্য যা 2D ভেক্টরকে ফেরত দেয় তা মোটেই বোঝা যায় না।


"উদাহরণস্বরূপ 2 ডি স্পেসে তিনটি পয়েন্টের বাতাসের সন্ধান করতে ব্যবহৃত হতে হবে" @ নিলস পিপেনব্রিংক, এই প্রসঙ্গে আপনি কী বোঝাতে চাইছেন?
নাদের বেলাল

4
@ নাদরবেলাল আমি মনে করি এখানে বাতাসটি বোঝাচ্ছে - আমরা যদি বিন্দু থেকে অন্য দিকে সি তে যাই, তবে আমরা কেবল যে কোণটি প্রসারিত করেছি তার নিরিখে আমরা কী ঘড়ির কাঁটা বা অ্যান্টি-ক্লকওয়াইজ যাব?
অমিত তোমার

12

ক্রস প্রোডাক্টের আর একটি দরকারী সম্পত্তি হ'ল এর দৈর্ঘ্য দুটি ভেক্টরের মধ্যবর্তী কোণটির সাথে সম্পর্কিত:

| axb | = | ক | । | খ | । সাইন (থেইটা)

বা

sine (theta) = | axb | / (| আ। | বি |)

সুতরাং, উপরোক্ত 1 টি বাস্তবায়নে যদি aএবং bইউনিট ভেক্টর হিসাবে আগে থেকেই পরিচিত হয় তবে সেই ফাংশনের ফলাফলটি হ'ল সাইন () মান।


4
... যা ভেক্টর এ এবং ভেক্টর খ এর মধ্যে ত্রিভুজের ক্ষেত্রফলের দ্বিগুণ।
টিম লাভল-স্মিথ

5

বাস্তবায়ন 1 হ'ল দুটি ভেক্টরের পারপ ডট পণ্য । 2 ডি গ্রাফিক্সের জন্য আমি যে সবচেয়ে ভাল রেফারেন্স জানি তা হ'ল দুর্দান্ত গ্রাফিক্স রত্ন সিরিজ। আপনি যদি স্ক্র্যাচ 2 ডি কাজ করে থাকেন তবে এই বইগুলি থাকা সত্যিই গুরুত্বপূর্ণ। চতুর্থ খণ্ডে "পার্প ডট পণ্যগুলির আনন্দ" নামে একটি নিবন্ধ রয়েছে যা এর প্রচুর ব্যবহারে যায়।

পের্প ডট পণ্যটির একটি বড় ব্যবহার হ'ল sinদুটি ভেক্টরের মধ্যবর্তী কোণকে আকার দেওয়া , ঠিক যেমন বিন্দুটিরcos কোণ কোণকে পরিমাপ করে। অবশ্যই আপনি দুটি ভেক্টরের মধ্যবর্তী কোণ নির্ধারণ করতে ডট পণ্য এবং পের্প ডট পণ্য একসাথে ব্যবহার করতে পারেন ।

এটি এখানে একটি পোস্ট এবং এখানে ওল্ফ্রাম ম্যাথ ওয়ার্ল্ড নিবন্ধ।


3

আমি তার গণের মধ্যে 2 ডি ক্রস পণ্য ব্যবহার করছি তার ভর কেন্দ্রের সাথে সম্পর্কিত একটি নির্বিচারে বিন্দুতে একটি বল ভেক্টর দ্বারা কাজ করা হচ্ছে যে একটি বস্তুর জন্য নতুন সঠিক ঘূর্ণন সন্ধান করতে। (স্কেলার জেড এক।)


3

একটি দরকারী 2 ডি ভেক্টর অপারেশন একটি ক্রস পণ্য যা স্কেলারটি দেয় returns বহুভুজের ধারাবাহিক দুটি প্রান্ত বাম বা ডানদিকে বাঁকানো আছে কিনা তা দেখতে আমি এটি ব্যবহার করি।

থেকে Chipmunk2D উৎস:

/// 2D vector cross product analog.
/// The cross product of 2D vectors results in a 3D vector with only a z component.
/// This function returns the magnitude of the z value.
static inline cpFloat cpvcross(const cpVect v1, const cpVect v2)
{
        return v1.x*v2.y - v1.y*v2.x;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.