سلام، لطفا وارد شوید یا عضو شوید.

نویسنده موضوع: رسم کمان دایره ای در بین خطوط موازی  (دفعات بازدید: 2967 بار)

آفلاین ابوالفضل دیانت

  • همکاران
  • Hero Member
  • ***
  • تشکر
  • -اهدا شده: 192
  • -دریافت شده: 271
  • ارسال: 812
    • ديدن مشخصات
با سلام
این کار یک روش ساده دارید که همان رسم یکسری arc و نقطه گذاری به صورت دستی است، اما یک روش اصولی و زیبا دارد که من سعی می کنم در ادامه روش دوم را بگویم که بتوانید برای بار بعدی نیز از آن استفاده کنید. روش یاد شده را گام به گام در ادامه تشریح می کنم.

الف) بسته tikz را فراخوانی کنید، و کتابخانه intersections را نیز فراخوانی کنید، یعنی قبل از \begin{document} بنویسید:
\usepackage{tikz}
\usetikzlibrary{intersections}

ب) در ابتدا یک محیط tikzpicture به صورت زیر تعریف کنید.
\begin{tikzpicture}

\end{tikzpicture}
کدهایی که در ادامه می آید را باید در این محیط بنویسید.

ج) تعدادی خط موازی تعریف کنید، که شما قبلا این کار را کرده اید.
  \draw[gray,very thick,name path=line1] (-5,0) -- (5,0) node[at end,above]{$v_{1}$};‎
  \draw[gray,very thick,name path=line2] (-5,-1) -- (5,-1)node[at end,above]{$v_{2}$};‎
  \draw[gray,very thick,name path=line3] (-5,-2) -- (5,-2)node[at end,above]{$v_{3}$};‎
  \draw[gray,very thick,name path=line4] (-5,-3) -- (5,-3)node[at end,above]{$v_{4}$};‎
  \draw[gray,very thick,name path=line5] (-5,-4) -- (5,-4)node[at end,above]{$v_{5}$};‎
فقط دقت کنید که من یک قسمت
node[at end,above]{$v_{1}$}
به کار شما اضافه کردم. این کار موجب می شود که متن یاد شده بین آکولاد مثلا $v_{5}$ در انتهای خط متناظرش ظاهر شود. فقط دقت کنید که چون این دستور در ادامه دستور رسم draw آمده و بین آن ها ; وجود ندارد پس \ قبل از node نگذارید و گرنه Latex خطا می گیرد.
در ضمن دقت کنید که با دستور name path به هر خط یک اسم دلخواه تخصیص داده ام.

د) من دو بیضی به صورت زیر تعریف کردم.
\draw[green,rotate=-55,name path=ellips1] (3,2.5) ellipse (9cm and 2cm);
\draw[green,rotate=55,name path=ellips2] (-3,2.5)ellipse (9cm and 2cm);
دقت کنید که با دستور name path به هر کدام از بیضی ها یک اسم دلخواه دادم. واضح است که
(3,2.5) ellipse (9cm and 2cm)
اولی مرکز بیضی و دومی به ترتیب شعاع محور x و y در بیضی است. در ضمن با rotate=55 بیضی را به اندازه زاویه دلخواه به درجه چرخاندم.

ه) در این مرحله از کتابخانه intersections‌ استفاده می کنم بدین صورت که به محل تلاقی هر یک از بیضی ها با خطوط یک node‌ تخصیص می دهم.
\node[name intersections={of=ellips1 and line1}](A1) at(intersection-1){};
\node[name intersections={of=ellips2 and line1}](B1) at(intersection-1){};
 
  \node[name intersections={of=ellips1 and line2}](A2) at(intersection-1){};
  \node[name intersections={of=ellips2 and line2}](B2) at(intersection-1){};
 
  \node[name intersections={of=ellips1 and line3}](A3) at(intersection-1){};
  \node[name intersections={of=ellips2 and line3}](B3) at(intersection-1){};
 
  \node[name intersections={of=ellips1 and line4}](A4) at(intersection-1){};
  \node[name intersections={of=ellips2 and line4}](B4) at(intersection-1){};
 
  \node[name intersections={of=ellips1 and line5}](A5) at(intersection-1){};
  \node[name intersections={of=ellips2 and line5}](B5) at(intersection-1){};
دقت کنید که
name intersections={of=ellips1 and line1}
یعنی به tikz  می گوید محل تلاقی شکل با نام ellips1 و line1 را بدست آور. بعد از بدست آوردن این محل‌های تلاقی tikz آن ها را در متغیرهایی به نام intersection-1 ذخیره می کند. پر واضح است که اگر دو محل تلاقی وجود داشته باشد یک intersection-1 داریم و یک intersection-2.  در ضمن یک node هم برای محل تلاقی دو بیضی در نظر گرفته ام، به صورت:
\node[name intersections={of=ellips1 and ellips2}](Center) at(intersection-4){};
همان طور که در فایل اتچ شده مشاهده می شود این دو بیضی چهار نقطه تلاقی دارد که نقطه چهارمش را ما می خواهیم، چرا؟ پاسخ: به شکل نگاه کنید.

و) در این گام همان طور که در تصویر اتچ شده در شکل شما در پست قبلی بود، یک نقطه بین تلاقی بین دو منحنی می گذارم.
\draw[fill=red](Center)circle(.6mm);
که Center همان node محل تلاقی دو بیضی است.

ز) در مرحله بعدی از نقطه محل تلاقی بیضی ellips1 با هر یک از خطوط linex به محل تلاقی ellips2 با همان خط linex یک curve با دستورات زیر رسم می کنم.
\draw[-] (B1) to[bend right=20] (A1);
\draw[-] (B2) to[bend right=20] (A2);
\draw[-] (B3) to[bend right=20] (A3);
\draw[-] (B4) to[bend right=20] (A4);
\draw[-] (B5) to[bend right=20] (A5);
برای درک بهتر به تعریف node‌های به نام A1 تا A5 و B1‌ تا B5 مراجعه کنید. در ضمن لازم به ذکر است که bend right=20 زاویه خروج خم را نشان می دهم هرچه این زاویه کمتر خم خوابیده تر خواهد بود.

ح) برای محو شدن بیضی ها کافی است به جای رنگ green بنویسید draw=none یعنی
\draw[draw=none,rotate=-55,name path=ellips1] (3,2.5) ellipse (9cm and 2cm);
\draw[draw=none,rotate=55,name path=ellips2] (-3,2.5)ellipse (9cm and 2cm);
این طوری بیضی ها محو می شود و فقط کمان‌ها می ماند.

و) البته در شکل شما اگر دقت کنید هر کمان خطوط را تا حدی رد کرده است، برای این کار دستورات رسم کمان را باید به صورت زیر بنوسید.
\draw[-] ($ (B1)+(-0.4,.2)$) to[bend right=40] ($(A1)+(0.4,.2)$);
\draw[-] ($ (B2)+(-0.4,.2)$) to[bend right=30] ($(A2)+(0.4,.2)$);
\draw[-] ($ (B3)+(-0.4,.2)$) to[bend right=30] ($(A3)+(0.4,.2)$);
\draw[-] ($ (B4)+(-0.4,.2)$) to[bend right=30] ($(A4)+(0.4,.2)$);
\draw[-] ($ (B5)+(-0.4,.2)$) to[bend right=30] ($(A5)+(0.4,.2)$);
برای این که تفاوت کار را مشاهده کنید، فایل s2.pdf را نگاه کنید. البته اگر این دستورات را بزنید در ابتدا با خطا مواجه خواهید شد، چرا که برای این ها باید کتابخانه calc را هم اضافه کنید پس فراخوانی tikz شما به صورت زیر خواهد شد.
\usepackage{tikz}
\usetikzlibrary{intersections,calc}
در واقع کار خاصی نکردم، فقط نقاط را کمی به بالا و سمت های چپ و راست شیفت دادم، و برای زیباتر شدن زاویه خروج از خط را نیز بیشتر گرفتم.


ز) برای رسم کمان ها من یک خط موازی ششم نامریی draw=none‌ در نظر گرفتم بیضی ها را قطع دادم، یعنی این طوری
\draw[draw=none,very thick,name path=line6] (-5,-5) -- (5,-5);‎
\node[name intersections={of=ellips1 and line6}](A6) at(intersection-1){};
\node[name intersections={of=ellips2 and line6}](B6) at(intersection-1){};
سپس برای رسم دو کمان بزرگ این گونه عمل کردم.
\draw [xshift=4cm,-latex] plot [smooth] coordinates { (Center) (A1) (A2) (A3) (A4) (A5) (A6)};
\draw [xshift=4cm,-latex] plot [smooth] coordinates { (Center) (B1) (B2) (B3) (B4) (B5) (B6)};
فایل S3 خروجی نهایی مدنظر شما است.

هر یک از فایل های اتچ شده را شما باید بتوانید به صورت normal کامپایل کنید اگر این اتفاق نیافتاد حتما مشکل از TexLive2014 نبودن و عدم بروزبودن بسته ها است.
امیدوارم مشکل حل شده باشد اگر سوال دارید دوستان هستند چون من به علت مسافرت تا یک هفته نیستم.
باتشکر
« آخرين ويرايش: ژوئیه 28, 2014, 06:05:13 am توسط ابوالفضل دیانت »

کاربرانی که از پست شما تشکر کرده‌اند را دنبال کنید:



تغییر علامت صفر از یک نقطه به دایره‌ای توخالی

نویسنده hasannooriانجمن ریاضیات و علوم

پاسخ ها: 13
مشاهده: 5785
آخرين ارسال نوامبر 30, 2012, 10:33:22 am
توسط محمود امین‌طوسی
درج شماره خط در کنار خطوط کتاب

نویسنده مهدی شریعتانجمن حروف‌چینی مستندات

پاسخ ها: 1
مشاهده: 3900
آخرين ارسال ژانویه 20, 2010, 09:36:04 am
توسط محمود امین‌طوسی
فاصله بین خطوط

نویسنده setarehانجمن سبک نوشتار

پاسخ ها: 2
مشاهده: 5531
آخرين ارسال ژانویه 28, 2010, 06:14:09 pm
توسط هادی صفی‌اقدم
چطور همه ی خطوط یک پاراگراف به جز اولی را کمی داخل تر بنویسم؟

نویسنده ir1979انجمن انجمن تازه‌کاران

پاسخ ها: 11
مشاهده: 5379
آخرين ارسال مه 20, 2010, 11:07:42 am
توسط شهاب
تغییر اندازۀ فونت و فاصلۀ بین خطوط

نویسنده mahdikooshkانجمن زی‌تک

پاسخ ها: 6
مشاهده: 9978
آخرين ارسال آوریل 22, 2013, 09:32:43 am
توسط behnoud
دایره توپر و خالی در زیرنویس شکل

نویسنده محمد چهارسوقیانجمن گرافیک، جدول و شکل

پاسخ ها: 3
مشاهده: 6739
آخرين ارسال فوریه 19, 2011, 09:24:00 am
توسط hasannoori
تنظیم فاصله بین خطوط

نویسنده زینبانجمن انجمن تازه‌کاران

پاسخ ها: 1
مشاهده: 13022
آخرين ارسال ژوئن 11, 2011, 02:23:16 pm
توسط هادی صفی‌اقدم
تغییر فاصله خطوط در محیط itemize و enumerate

نویسنده سید مهدی موسویانجمن انجمن تازه‌کاران

پاسخ ها: 5
مشاهده: 3774
آخرين ارسال ژوئیه 17, 2011, 11:37:03 pm
توسط سید مهدی موسوی