<prompt> Anzisha programu ya C inayotumia algoriti rahisi ya kufuatilia miale ili kutoa matukio ya 3D yenye maumbo ya kimsingi tufe, ndege na mwanga. Programu inapaswa kutoa picha iliyotolewa kama faili ya PNG.PLINFORMAT  <response>: cpppamoja na pamoja na pamoja na pamoja na pamoja na pamoja na stb_image_write.hkutumia nafasi ya majina std;kutumia nafasi ya jina Eigen;darasa la Vector3 umma: Vekta3kuelea x 0, kuelea y 0, kuelea z 0 : vx, y, z kuelea x const return v.x; float y const return v.y; float z const return v.z; Opereta wa Vector3const Vector3 nyingine const rudisha Vector3v other.v; Privat: Vekta3const Eigen::Vector3f v : vv Eigen::Vector3f v;;darasa Ray umma: Rayconst Vector3 asili, const Vector3 mwelekeo : asiliasili, mwelekeomwelekeo.normalized Vector3 asili; Mwelekeo wa Vector3;;umbo la darasa umma: virtual bool intersectconst Ray ray, float t const 0;;darasa Sphere : umbo la umma umma: Tufeconst Vector3 center, radius ya kuelea : centerkatikati, radiusradius bool intersectconst Ray ray, float t const kubatilisha ... algorithm ya makutano Kituo cha Vector3; radius ya kuelea;;Ndege ya darasa: Umbo la umma umma: Ndegeconsst Vector3 point, const Vector3 kawaida : uhakikapoint, normalnormal.normalized bool intersectconst Ray ray, float t const kubatilisha ... algorithm ya makutano Vector3 uhakika; Vector3 kawaida;;mwanga wa darasa umma: Mwanga const Vector3 position, ukali wa kuelea : nafasimsimamo, ukalikiwango Msimamo wa Vector3; nguvu ya kuelea;;eneo la darasa umma: utupu addShapekipekee_ptr umbo maumbo.sukuma_nyumasogezaumbo; utupu addLightconst Light light taa.sukuma_nyumamwanga; const Shape intersectconst Ray ray, float t const ... tafuta makutano ya karibu vekta maumbo; vector taa;;Vector3 shadeconst Ray ray, const Scene scene kuelea t; const Umbo umbo scene.intersectray, t; ikiwa !umbo kurudi Vector30; rangi ya mandharinyuma Kuhesabu kivuli kulingana na makutano na taa ... kurudi rangi;kutoa utupuconsst Onyesho eneo, kamba ya const outputFile upana wa int 800; urefu wa int 600; vekta saiziupana urefu 3; kwa int y 0; y urefu; y kwa int x 0; x upana; x Tuma miale kupitia pikseli Ray ray ...; Vector3 rangi kivuliray, eneo; int index y upana x 3; pikseliindex color.x 255; saiziindex 1 color.y 255; saiziindex 2 color.z 255; stbi_write_pngoutputFile.c_str, upana, urefu, 3, pixels.data, upana 3;int main Unda onyesho lako la 3D na maumbo na taa ... Toa tukio na uihifadhi kama faili ya PNG kutoa eneo, output.png; kurudi 0; 