رفتن به مطلب
setarehbaran

پیداکردن مختصات سه بعدی نقطه به کمک متلب

پست های پیشنهاد شده

.با سلام و خسته نباشید،

 

من این اطلاعات رو واسه پیدا کردن نقطه dدارم،

-نقطه d توی صفحه شامل نقاط a,b, c قرار گرفته است.

-فاصله بین نقطه c,d را داریم.

- خط گذرنده از point c, point d بر خط کذرنده از point a, point d عمود است.

- نقاط a,d,c روی محیط یک دایره قرار گرفته اند.

 

من میحوام مختصات سه بعدی نقطه d را با نوشتن یک کد متلب به دست بیاورم. چون در هر لحظه مختصات این نقطه تغییر میکنه واسه همین میخوام کد بنویسم تا محاسبام سریع و راحت بشه. من دستگاه معادلاتی که با اطلاعات فوق به دست میارم غیرخطی هستش و اگه درست فکر کنم جواب دقیقی با متلب نمیشه ازش گرفت. لطفا کسی اگه راه حلی واسه به دست آوردن مختصات این نقطه به کمک متلب به فکرش میرسه بهم کمک کنه.

 

شمای مربوط به مکان نقاط رو هم یه عکس گذاشتم.

 

ممنونم

chord.jpg

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
.با سلام و خسته نباشید،

 

من این اطلاعات رو واسه پیدا کردن نقطه dدارم،

-نقطه d توی صفحه شامل نقاط a,b, c قرار گرفته است.

-فاصله بین نقطه c,d را داریم.

- خط گذرنده از point c, point d بر خط کذرنده از point a, point d عمود است.

- نقاط a,d,c روی محیط یک دایره قرار گرفته اند.

 

من میحوام مختصات سه بعدی نقطه d را با نوشتن یک کد متلب به دست بیاورم. چون در هر لحظه مختصات این نقطه تغییر میکنه واسه همین میخوام کد بنویسم تا محاسبام سریع و راحت بشه. من دستگاه معادلاتی که با اطلاعات فوق به دست میارم غیرخطی هستش و اگه درست فکر کنم جواب دقیقی با متلب نمیشه ازش گرفت. لطفا کسی اگه راه حلی واسه به دست آوردن مختصات این نقطه به کمک متلب به فکرش میرسه بهم کمک کنه.

 

شمای مربوط به مکان نقاط رو هم یه عکس گذاشتم.

 

ممنونم

 

سلام

اینجور که من فهمیدم، شما مختصات نقاط a و b و c و فاصله cd رو دارین، میخواین مختصات d رو پیدا کنین، درسته؟

 

این کد به نظر که جواب میده:

 

clear;
a = rand(1,3);
b = rand(1,3);
c = rand(1,3);
cd = rand;
center = (a + c)/2; 
r = sqrt(sum((a-c).^2))/2;
while cd>r
 cd = rand;
end
[x,y,z] = sphere;
mesh(r*x+(a(1)+c(1))/2,r*y+(a(2)+c(2))/2,r*z+(a(3)+c(3))/2)
hold on
grid on
mesh(cd*x+c(1),cd*y+c(2),cd*z+c(3))
scatter3(a(1),a(2),a(3),'*r') 
scatter3(b(1),b(2),b(3),'*g')
scatter3(c(1),c(2),c(3),'*r')


syms x y z
E1 = (x-center(1))^2+(y-center(2))^2 + (z-center(3))^2 ; 
E2 = (x-c(1))^2+(y-c(2))^2 + (z-c(3))^2 ;
E3 = cross(a-b,c-b)*[x-a(1);y-a(2);z-a(3)];
[x,y,z] = solve(E1-r^2,E2-cd^2,E3);
scatter3(double(x),double(y),double(z),'*m')
d1 = [double(x(1)),double(y(1)),double(z(1))]
d2 = [double(x(2)),double(y(2)),double(z(2))]

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ممنونم از جوابتون. یه سوال داشتم. شما دستگاه معادلات درجه 2 رو با دستور solve حل کردید. میخواستم بدونم که حل با این روش آیا حل دقیق هستش؟ چون من مراکز مفاصل رو با این روش به دست میارم و واسم نوع حلش مهم هست.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
ممنونم از جوابتون. یه سوال داشتم. شما دستگاه معادلات درجه 2 رو با دستور solve حل کردید. میخواستم بدونم که حل با این روش آیا حل دقیق هستش؟ چون من مراکز مفاصل رو با این روش به دست میارم و واسم نوع حلش مهم هست.

 

خیلی با Solve کار نکردم، ممکنه نتونه جواب رو پیدا کنه یا پارامتری جواب بده (بر حسب یه معادله دیگه)، ولی بعید میدونم جواب غلط بده. اگه هم نتونه Warning میده و در نهایت هم هیچ جوابی نمیده. توی این سوال چیزی که مشخص بود، این بود که معادله دو جواب داره، Solve هم دو تا جواب داده، جواب ها رو هم خیلی راحت میتونین تست کنین:

 

clear;
a = rand(1,3);
b = rand(1,3);
c = rand(1,3);
cd = rand;
center = (a + c)/2; 
r = sqrt(sum((a-c).^2))/2;
while cd>r
 cd = rand;
end
[x,y,z] = sphere;
mesh(r*x+(a(1)+c(1))/2,r*y+(a(2)+c(2))/2,r*z+(a(3)+c(3))/2)
hold on
grid on
mesh(cd*x+c(1),cd*y+c(2),cd*z+c(3))
scatter3(a(1),a(2),a(3),'*r') 
scatter3(b(1),b(2),b(3),'*g')
scatter3(c(1),c(2),c(3),'*r')


syms x y z
E1 = (x-center(1))^2+(y-center(2))^2 + (z-center(3))^2 ; 
E2 = (x-c(1))^2+(y-c(2))^2 + (z-c(3))^2 ;
E3 = cross(a-b,c-b)*[x-a(1);y-a(2);z-a(3)];
[x1,y1,z1] = solve(E1-r^2,E2-cd^2,E3);
scatter3(double(x1),double(y1),double(z1),'*m')
d1 = [double(x1(1)),double(y1(1)),double(z1(1))]
d2 = [double(x1(2)),double(y1(2)),double(z1(2))]

% test
cd
cd1 = sqrt(sum((d1-c).^2))
cd2 = sqrt(sum((d2-c).^2))
double(subs(E1,[x y z],d1)-r^2)
double(subs(E1,[x y z],d2)-r^2)
double(subs(E2,[x y z],d1)-cd^2)
double(subs(E2,[x y z],d2)-cd^2)
double(subs(E3,[x y z],d1))
double(subs(E3,[x y z],d2))

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام. خیلی ممنون از جوابتون

 

فقط یه سوال دیگه،

 

چرا فقط زمانی که cd

 

یعنی اگه cd>r باشه مساله جوابی نخواهد داشت؟

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
سلام. خیلی ممنون از جوابتون

 

فقط یه سوال دیگه،

 

چرا فقط زمانی که cd

 

یعنی اگه cd>r باشه مساله جوابی نخواهد داشت؟

 

سلام

خواهش می کنم.

adc یه مثلث قائم الزاویه هست، بزرگترین ضلع این مثلث هم باید وترش باشه، در غیر این صورت ac نمیتونه وتر این مثلث باشه و اندازه زاویه adc کوچکتر از نود میشه.

یا شاید اینجوری راحتر بشه گفت که یه دایره داریم به قطر ac، که اگه d بخواد روی محیط این دایره باشه، cd یکی از وترهای این دایره میشه، بزرگترین وتر دایره هم قطرش یعنی ac هست، پس cd باید ازش کوچکتر باشه، در صورتی که بزرگتر بودن cd از ac، دیگه d روی دایره قرار نداره.

Edit:

 

به جای ad ،cd نوشته بودم.

توی کد هم مقایسه cd باید با قطر (2r) انجام میشد، نه شعاع:

 

clear;
a = rand(1,3);
b = rand(1,3);
c = rand(1,3);
cd = rand;
center = (a + c)/2; 
r = sqrt(sum((a-c).^2))/2;
while cd>(2*r)
 cd = rand;
end
[x,y,z] = sphere;
mesh(r*x+(a(1)+c(1))/2,r*y+(a(2)+c(2))/2,r*z+(a(3)+c(3))/2)
hold on
grid on
surf(cd*x+c(1),cd*y+c(2),cd*z+c(3))
scatter3(a(1),a(2),a(3),'*r') 
scatter3(b(1),b(2),b(3),'*g')
scatter3(c(1),c(2),c(3),'*r')

syms x y z
E1 = (x-center(1))^2+(y-center(2))^2 + (z-center(3))^2 ; 
E2 = (x-c(1))^2+(y-c(2))^2 + (z-c(3))^2 ;
E3 = cross(a-b,c-b)*[x-a(1);y-a(2);z-a(3)];
[x,y,z] = solve(E1-r^2,E2-cd^2,E3);
scatter3(double(x),double(y),double(z),'*m')
d1 = [double(x(1)),double(y(1)),double(z(1))]
d2 = [double(x(2)),double(y(2)),double(z(2))]

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

من میخوام یه برنامه ای بنویسم که اول 2 تا نقطه توی مختصات کارتزین بگیرم, بعد فاصله ی بین دو نقطه رو بدست بیارم و در آخر شیب این خط رو محاسبه کنم.

میشه لطفا کمک کنید؟

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام. من 3 تا ویژگی دارم که طول بردار X هستند. (در واقع 3تا عدد) . حالا برای مقایسه این ویژگی با 3 ویژگی دیگر در فضای 3 بعدی مثل اینکه بایست با scatter کدنویسی انجام دهم .حالا بعد انجام دادن این مراحل به من 2 نقطه در بالا و 2 نقطه در پایین می دهد. آیا این درست است؟؟

سوال بعدی این است که چگونه بایست فاصله این دو نقطه را پیدا کرد.؟؟

با تشکر از شما

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


×
×
  • جدید...