আমি কীভাবে টেট্রহেড্রনের পরিধিটি আবিষ্কার করব?


9

আমি কেন্দ্রের স্থানাঙ্কগুলি এবং চারটি থ্রি পয়েন্ট প্রদত্ত একটি টিট্রেহেড্রন পরিধিটির ব্যাসার্ধ সর্বাধিক হ্রাস করা সমীকরণের সন্ধান করছি ।

আমি ইন্টারনেটে যা পেয়েছি তা মূলত ফ্ল্যাট থ্রিডি ত্রিভুজের ক্ষেত্রের ক্ষেত্র, বা কিছু রুক্ষ গাণিতিক সংজ্ঞা বা নিয়মিত টেট্রেহেড্রনগুলির মতো কিছু খুব একক ক্ষেত্রে মোকাবিলা করে। যাইহোক আমি নীচের সমীকরণটি সন্ধান করতে পেরেছি তবে আমি কিছু মিস করেছি:

    ->  ->      ->
let d1, d2, and d3 three vectors of any face of the triangle :

    | d1x  d1y  d1z |   | x |   | d1^2 |
2 * | d2x  d2y  d2z | * | y | = | d2^2 |
    | d3x  d3y  d3z |   | z |   | d3^2 |

এই ক্ষেত্রে আমার জ্ঞানের সীমা রয়েছে তবে আমি মনে করি আমি ম্যাট্রিক এবং ভেক্টর অপারেশন পরিচালনা করতে পারি। তবে সমীকরণের ডান অংশটি কি প্রতিটি ভেক্টরের আদর্শের বর্গাকার? (যা কোনও ভেক্টরের মধ্যে রয়েছে)। সমীকরণ কি বৈধ? এটি কি কেবল লেখক যারা অলসভাবে লিখতে ভুলে গিয়েছিলেন | d1 | ^ 2? বা কিছু গাণিতিক সম্পত্তি সংজ্ঞায়িত করার একটি সাধারণ উপায়।

পিএস: এটি ডেলাউন ট্রায়াঙ্গুলেশন বাস্তবায়নের জন্য। সমীকরণ (9 নম্বর) নিম্নলিখিত লিঙ্কে রয়েছে: https://www2.mps.mpg.de/homes/daly/CSDS/t4h/tetra.htm


4
গণিতের স্ট্যাকেক্সচেঞ্জ চেষ্টা করুন।
মাজেতে

ধন্যবাদ আমি সেখানে পরিধিটি গণনার একটি উপায় খুঁজে পেয়েছি!
herme5

1
@ জেমসএএমডি লিঙ্কটি www2.mps.mpg.de/homes/daly/CSDS/t4h/tetra.htm
herme5

3
@ হারমে ৫, আপনি কীভাবে উত্তরটি গণনা করছেন সে সম্পর্কে আপনার নিজের উত্তর এখানে নির্দ্বিধায় পোস্ট করুন। ভবিষ্যতে অনেক লোক উত্তর খুঁজে পাওয়ার আশায় এখানে আসতে পারে এবং আপনি এটি ভাগ করে নেওয়া তাদের পক্ষে মূল্যবান হবে। এটি আপনার নিজের উত্তর পোস্ট করা এবং এমনকি এটি গ্রহণ করা সম্পূর্ণ গ্রহণযোগ্য acceptable
টিম হল্ট

2
টিমহোল্ট বিজ্ঞপ্তির জন্য ধন্যবাদ। আমি এটা করব ! তবুও আমি কীভাবে এটি করেছি তা সম্পর্কে আমি আর নিশ্চিত নই, এটি 2 বছর আগেও ছিল! আমাকে আমার পুরানো বাস্তবায়নটি সন্ধান করতে এবং তার দিকে একবার নজর দেওয়া যাক
herme5

উত্তর:


2

যদিও এটি একটি প্রাচীন থ্রেড, আমি ভেবেছিলাম উত্তরসূরীদের জন্য কিছুটা রেফারেন্স দেওয়া ভাল। সূত্রটির উত্স হ'ল ফিলিপ জে স্নাইডার এবং ডেভিড এইচ। ইবারলির জ্যামিতিক সরঞ্জামগুলি কম্পিউটার গ্রাফিকগুলির জন্য। পাঠ্য অনুযায়ী কিছু খেয়াল করুন

টিট্রাহেড্রন ভি 0, ভি 1, ভি 2, ভি 3 অর্ডার করা হয়েছে যাতে এটি ক্যানোনিকাল এক (0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1 )।

আমি যেমন আইসোমরফিজমটি বুঝতে পারি , জ্যামিতিতে ব্যবহার করার সময় বিভিন্ন রকম অর্থ হতে পারে। যদি তার অর্থ গ্রাফ তত্ত্ব সম্পর্কিত আইসোমর্ফিক হয় তবে নিম্নলিখিত কোডটি সঠিকভাবে আচরণ করা উচিত, কারণ যে কোনও টিট্রেহেড্রনের টপোলজি একই (কে 4, একটি সম্পূর্ণ গ্রাফ)। আমি ওয়ানফ্রাম আলফার বিরুদ্ধে ফাংশনটির ফলাফলগুলি ক্যানোনিকাল উল্লম্বের ক্রমানুসারে বিভিন্ন ক্রম ব্যবহার করে পরীক্ষা করেছি এবং ফলাফলের মধ্যে আমি কোনও পার্থক্য দেখলাম না। যদি আদেশটি কোনও সমস্যা হিসাবে প্রমাণিত হয়, তবে আমি এই ফাংশনটিতে ইনপুট নেওয়ার সময় উল্লম্ব ভি 1, ভি 2, ভি 3 দ্বারা গঠিত ত্রিভুজটির স্বাভাবিক পরীক্ষা করার পরামর্শ দিয়েছি এবং ডট-প্রোডাক্ট পরীক্ষার সাথে একটি অর্ধ-জায়গার মতো পয়েন্টগুলি ট্রিট করার পরামর্শ দিচ্ছি যদি সেই ত্রিভুজটি সঠিকভাবে মুখোমুখি হয়। যদি এটি না হয় তবে সাধারণstd::swapত্রিভুজটির যে কোনও দু'টি উল্লম্বটি স্বাভাবিকের দিককে বিপরীত করবে এবং আপনি চালিয়ে যেতে পারেন। তবে আমি যেমন বলেছি, আমি বিভিন্ন ক্রমের সাথে কোনও পার্থক্য দেখিনি।

কোনও প্রয়োগের বিভ্রান্তি এড়াতে ম্যাট্রিক ব্যবহার না করে এখানে অনুবাদকৃত কোডটি রয়েছে, এটি মোটামুটি সোজা-এগিয়ে;

void Circumsphere(const Vec3& v0, const Vec3& v1, const Vec3& v2, const Vec3& v3, Vec3* center, float* radius)
{
  //Create the rows of our "unrolled" 3x3 matrix
  Vec3 Row1 = v1 - v0;
  float sqLength1 = length2(Row1);
  Vec3 Row2 = v2 - v0;
  float sqLength2 = length2(Row2);
  Vec3 Row3 = v3 - v0;
  float sqLength3 = length2(Row3);

  //Compute the determinant of said matrix
  const float determinant =   Row1.x * (Row2.y * Row3.z - Row3.y * Row2.z)
                            - Row2.x * (Row1.y * Row3.z - Row3.y * Row1.z)
                            + Row3.x * (Row1.y * Row2.z - Row2.y * Row1.z);

  // Compute the volume of the tetrahedron, and precompute a scalar quantity for re-use in the formula
  const float volume = determinant / 6.f;
  const float iTwelveVolume = 1.f / (volume * 12.f);

  center->x = v0.x + iTwelveVolume * ( ( Row2.y * Row3.z - Row3.y * Row2.z) * sqLength1 - (Row1.y * Row3.z - Row3.y * Row1.z) * sqLength2 + (Row1.y * Row2.z - Row2.y * Row1.z) * sqLength3 );
  center->y = v0.y + iTwelveVolume * (-( Row2.x * Row3.z - Row3.x * Row2.z) * sqLength1 + (Row1.x * Row3.z - Row3.x * Row1.z) * sqLength2 - (Row1.x * Row2.z - Row2.x * Row1.z) * sqLength3 );
  center->z = v0.z + iTwelveVolume * ( ( Row2.x * Row3.y - Row3.x * Row2.y) * sqLength1 - (Row1.x * Row3.y - Row3.x * Row1.y) * sqLength2 + (Row1.x * Row2.y - Row2.x * Row1.y) * sqLength3 );

  //Once we know the center, the radius is clearly the distance to any vertex
  *radius = length(*center - v0);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.