দুটি ত্রিভুজ ছেদ করে


19

2 ডি প্লেনগুলিতে 4 পয়েন্ট দেওয়া হয়েছে A, B, C, D, ত্রিভুজগুলির ছেদ অঞ্চলের ক্ষেত্রফল গণনা করুন OABএবং OCDযেখানে Oসমান্তরাল স্থানে রয়েছে বিমানের কেন্দ্র কোথায় (0, 0)

অ্যালগরিদমগুলি যা ধ্রুবক সময় জটিলতায় চলে আসে (গাণিতিক ক্রিয়াকলাপের ক্ষেত্রে) উত্সাহিত হয়, কিন্তু বাধ্য হয় না।

বিধি

  • প্রতিটি বিন্দু দুটি আসল সংখ্যা হিসাবে প্রতিনিধিত্ব করা হয়, তাদের এক্স এবং ওয়াই সমন্বয় বোঝায়।
    • Allyচ্ছিকভাবে, যদি আপনার প্রোগ্রামিং ভাষার (বা আপনার প্রোগ্রামিং ভাষার কোনও গ্রন্থাগার) অন্তর্নির্মিত Pointটাইপ বা সমতুল্য থাকে, তবে Pointএটিটিকে ইনপুট হিসাবে গ্রহণ করার অনুমতি দেওয়া হয় ।
  • ইনপুটটি 4 পয়েন্ট হিসাবে দেওয়া হয় তবে এতে সীমাবদ্ধ নয় তবে ফর্ম্যাটগুলিতে:
    • 8 টি স্থানাঙ্কের একটি তালিকা।
    • 4 পয়েন্টের একটি তালিকা, প্রতিটি পয়েন্ট যে কোনও সুবিধাজনক বিন্যাসে উপস্থাপন করা যেতে পারে।
    • 2 পয়েন্ট দুটি তালিকা।
    • প্রভৃতি
  • আপনি পয়েন্টগুলির নির্দিষ্ট ক্রম অনুমান করতে পারবেন না (ঘড়ির কাঁটার বিপরীতে বা ঘড়ির কাঁটার দিকের ক্রম)
  • আপনি ধরে নিতে পারবেন না যে পয়েন্টটি Oইনপুট হিসাবে পাস হয়েছে। অন্য কথায়, প্রোগ্রাম অবশ্যই বহিরাগত ইনপুট গ্রহণ এবং ব্যবহার করা উচিত নয়।
  • আপনি সব পয়েন্ট পৃথকভাবে ধরে নিতে পারবেন না। অন্য কথায়, ত্রিভুজগুলি অধঃপতন হতে পারে। আপনাকে সেই কেসটিও পরিচালনা করতে হবে (নীচের পরীক্ষার কেসগুলি দেখুন)
  • নিচের নমুনা পরীক্ষার মামলার তুলনায় নিখুঁত বা আপেক্ষিক পার্থক্য কম হওয়া উচিত ।10-3

জয়ের মানদণ্ড

এটি , বাইট জয়ের সংক্ষিপ্ত উত্তর!

নমুনা পরীক্ষার কেস

Ax Ay Bx By Cx Cy Dx Dy area

5 1 1 3 -1 0 0 -1 0
5 1 1 3 -1 0 0 0 0
5 1 1 3 0 0 0 0 0
5 1 1 3 3 4 4 -3 4.50418
5 1 1 3 1 2 2 1 1.5
5 1 1 3 -2 5 4 -2 1.74829
5 1 1 3 -2 5 5 4 2.96154
5 1 1 3 3 5 5 4 1.88462
5 1 1 3 3 5 3 1 3.92308
5 1 1 3 3 5 4 -1 5.26619
5 1 1 3 5 1 4 -1 0
5 1 1 3 5 1 1 3 7
1 3 1 3 5 1 1 3 0
1 3 1 3 1 3 1 3 0
4 8 4 -1 -2 6 -2 -3 0

1.2 3.4 -0.3 4.2 5 7.6 -1.1 2.4 2.6210759326188535
3.1 0.6 0.1 7.2 5.2 0.7 0.9 8 9.018496993987977

যদি কেউ চান, সঠিক আকারে প্রথম পরীক্ষার কেস গ্রুপের ফলাফলগুলি এখানে রয়েছে:

0
0
0
46375/10296
3/2
1792/1025
77/26
49/26
51/13
23345/4433
0
7
0
0
0

পরীক্ষার ক্ষেত্রে চিত্রের চিত্র 5 1 1 3 3 4 4 -3(সবুজ চতুর্ভুজের ক্ষেত্রটি প্রত্যাশিত আউটপুট):

[ ভাবমূর্তি]


আপনার পরীক্ষার ক্ষেত্রে একটিতে 8 এর চেয়ে 9 ইনপুট রয়েছে 1.2 1.2 3.4 -0.3 4.2 5 3 7.6 -1.1 2.4 0
কেলি লোডার

1
@ কেলিলাউডার ফিক্সড
ব্যবহারকারী 202729

উত্তর:


16

ওল্ফ্রাম ভাষা (গণিত) , 55 বাইট

0&@@Area@BooleanRegion[And,Simplex[{0{,}}~Join~#]&/@#]&

এটি অনলাইন চেষ্টা করুন!

তুচ্ছ উত্তর বন্ধ কয়েক বাইট শেভ।

%@{{{5, 1}, {1, 3}}, {{3, 4}, {4, -3}}} yields 46375/10296 or 4.504176379

প্রতিস্থাপন করা হচ্ছে Areaসঙ্গে DiscretizeRegionছেদ প্রদর্শন করবে।

এখানে চিত্র বর্ণনা লিখুন

যাইহোক, এটি কেবল ত্রিভুজ নয়, কোনও সিম্পলিক্সের সাথে কাজ করবে।

-1 বাইট জংহওয়ান মিনকে ধন্যবাদ

@ ইউজার ২২২২২৯ এর পরামর্শে 4 টি বাইট যুক্ত হয়েছে তবে এটি ত্রিভুজ হ্রাস করার জন্য 0 উপার্জন করে


1
বহুভুজকে সিম্প্লেক্সেও প্রতিস্থাপন করা যেতে পারে
কেলি লোডার

1
আরও একটি বাইট: {{0,0}}থেকে {0{,}}(কারণ এই কাজ অভিব্যক্তি মূল্যায়ণ করতে {Times[0, {Null, Null}]})
JungHwan ন্যূনতম

নমুনা পরীক্ষার ক্ষেত্রে তালিকাভুক্ত এই পরীক্ষার ক্ষেত্রে ব্যর্থ ।
ব্যবহারকারী 202729

ইতিমধ্যে উল্লেখ করা হয়েছে যে এটি টিআইওতে কাজ করে না। হুডের নীচে তাদের কী আছে তা নিশ্চিত নয়।
কেলি লোডার

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

5

পাইথন 2 + পিআইএল, 341 318 313 284 270 বাইট

ডেনিসকে বিশেষ ধন্যবাদ যা তাত্ক্ষণিকভাবে টিআইও -23 বাইটে পিআইএল যুক্ত করেছে
মিঃ এক্সকোডারকে ধন্যবাদ thanks

import PIL.Image as I,PIL.ImageDraw as D
l=[i*1000for i in[0,0]+input()+[0,0]]
z=zip(*[[i-min(t)for i in t]for t in l[::2],l[1::2]])
print sum(map(int.__mul__,*map(lambda i,c:D.Draw(i).polygon(c,1)or i.getdata(),map(I.new,'11',[[max(l)-min(l)]*2]*2),[z[:3],z[3:]])))/1e6

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস চেষ্টা করে দেখুন

ডিফারেন্স গণনা করতে এটি আক্ষরিকভাবে ত্রিভুজগুলি আঁকুন এবং উভয় চিত্রের মধ্যে অঙ্কিত পিক্সেলগুলির পরিমাণটি পরীক্ষা করুন।
এই পদ্ধতিটি একটি বৃত্তাকার ত্রুটি sertedোকানো হয়েছে যা চিত্রের আকার বাড়িয়ে নরম হয়।

ব্যাখ্যা

#the image/triangles are enlarged to increase the precision
#a pair of zeros are inserted in the start and at the end, this way "l" will have all 6 points to draw the triangles 
l=[i*1000for i in[0,0]+input()+[0,0]]
#split the input in x and y, where x=l[::2] and y=l[1::2]
#get the smallest number on each list, that will be "0" if there is no negative number, to be used as offset.
#this will be used to overcome the fact that PIL won't draw on negative coords
#zip "x" and "y" lists, to create a list containing the points
z=zip(*[[i-min(t)for i in t]for t in x,y])
#create 2 (B&W) blank images
#where the size is the difference between the smallest and the largest coord.
map(I.new,'11',[[max(l)-min(l)]*2]*2)
#draw both triangles and return the pixel list of each image
map(lambda i,c:D.Draw(i).polygon(c,1)or i.getdata(),<result of previous line>,[z[:3],z[3:]])
#count the amount of overlapping pixels by summing the color of each pixel, if the pixel is "1" in both images, then the triangles are overlapping, then the amount of pixels is divided by the initial enlarging factor squared (1e6)
print sum(map(int.__mul__,*<result of previous line>))/1e6
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.