рдкреЛрд╕реНрдЯ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ [рд╕реНрдкрд╖реНрдЯ рдЪреАрдЬреЛрдВ рдХреЗ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рджрдо] рдореЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд░рд▓ рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЦреБрдж рд╕реЗ рд╕рд╡рд╛рд▓ рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ "рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?", рддреЛ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдмреЗрд╢рдХ, рдпреЗ рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рд╛рд╣рд┐рддреНрдп рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд,
рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рддреНрд░рд┐рднреБрдЬ ABC рдХреЗ рдмрд┐рдВрджреБ P рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рд╣реИ ред
рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рддреНрд░рд┐рднреБрдЬ ABC рдХреЛ Belonging рдмрд┐рдВрджреБ P
рд╡рд┐рдЪрд╛рд░
рдХрднреА-рдХрднреА рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмрд┐рдВрджреБ рдХрд┐рд╕реА рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрдХреГрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рддреНрд░рд┐рднреБрдЬ ABC рд╣реИред
рджрд┐рдП рдЧрдП:
рдмрд┐рдВрджреБ P (P_x, P_y, P_z), рддреНрд░рд┐рднреБрдЬ рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЗ рд╕рд╛рде: A (A_x, A_y, A_z), B (B_x, B_y, B_z), C (C_x, C_y, C_z)ред
рддрдХрдиреАрдХ
рддреАрди рддреНрд░рд┐рдХреЛрдг рдмрдирддреЗ рд╣реИрдВ: рдПрдмреАрдкреА, рдПрд╕реАрдкреА, рдмреАрд╕реАрдкреАред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЙрдирдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдПрд╕
рдПрдмреАрдкреА , рдПрд╕
рдПрд╕реАрдкреА , рдПрд╕
рдмреАрд╕реАрдкреА рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдпреЛрдЧ рддреНрд░рд┐рдХреЛрдг рдПрд╕
рдПрдмреАрд╕реА рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдмрд┐рдВрджреБ рддреНрд░рд┐рднреБрдЬ ABC рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рддреНрд░рд┐рдХреЛрдг ABP, ACP, BCP рддреНрд░рд┐рднреБрдЬ ABC рдХреЗ рдХреБрдЫ рднрд╛рдЧ рд╣реЛрдВрдЧреЗ, рдФрд░ рдЙрдирдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдпреЛрдЧ рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░рдлрд▓ S
ABC рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдмрд┐рдВрджреБ рддреНрд░рд┐рднреБрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ S
ABP , S
ACP , S
BCP рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдпреЛрдЧ рддреНрд░рд┐рднреБрдЬ ABC рдХреЗ рдХреНрд╖реЗрддреНрд░рдлрд▓ рдХреЛ рдкрд╛рд░ рдХрд░ рдЬрд╛рдПрдЧрд╛ред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░, рдЬреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рддреНрд░рд┐рдХреЛрдг рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдХреНрдпрд╛ рд╣реИ: рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ
рд╣реЗрд░реЙрди рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рдирд╛ , рдЬреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдкрдХреНрд╖реЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рддреНрд░рд┐рдХреЛрдг рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ред рдЖрд░рд╛рдо рд╕реЗ
рд╕рдорд╛рд░реЛрд╣ рдХреЛрдб:
#define EPS 1e-10 float triangle_square(float a,float b, float c){ float p=(a+b+c)/2; return sqrt(p*(pa)*(pb)*(pc)); } float inside_triangle(float P_x,float P_y, float P_z, float A_x, float A_y, float A_z, float B_x, float B_y, float B_z, float C_x, float C_y, float C_z){ int inside=0; float AB=sqrt( (A_x-B_x)*(A_x-B_x) + (A_y-B_y)*(A_y-B_y) + (A_z-B_z)*(A_z-B_z) ); float BC=sqrt( (B_x-C_x)*(B_x-C_x) + (B_y-C_y)*(B_y-C_y) + (B_z-C_z)*(B_z-C_z) ); float CA=sqrt( (A_x-C_x)*(A_x-C_x) + (A_y-C_y)*(A_y-C_y) + (A_z-C_z)*(A_z-C_z) ); float AP=sqrt( (P_x-A_x)*(P_x-A_x) + (P_y-A_y)*(P_y-A_y) + (P_z-A_z)*(P_z-A_z) ); float BP=sqrt( (P_x-B_x)*(P_x-B_x) + (P_y-B_y)*(P_y-B_y) + (P_z-B_z)*(P_z-B_z) ); float CP=sqrt( (P_x-C_x)*(P_x-C_x) + (P_y-C_y)*(P_y-C_y) + (P_z-C_z)*(P_z-C_z) ); float diff=(triangle_square(AP,BP,AB)+triangle_square(AP,CP,CA)+triangle_square(BP,CP,BC))-triangle_square(AB,BC,CA); if (fabs(diff)<EPS) inside=1; return inside; }
рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ math.h рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк
рдЗрд╕ рдкреЛрд╕реНрдЯ рд╕реЗ рд░реВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред